You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中根据Admin权限控制ChangeStatus下拉列表选项?

实现权限控制下拉列表选项的方案

当然可以实现这个需求!咱们完全可以基于你现有的权限校验体系来调整ChangeStatus页面的下拉列表选项逻辑,具体实现步骤如下:

1. 在控制器方法中加入权限判断逻辑

在你的ChangeStatus控制器方法里,生成ViewBag.statusList的时候,结合当前订单状态和用户Admin权限来过滤选项:

public IActionResult ChangeStatus(int disposalOrderId)
{
    // 获取目标订单
    var disposalOrder = _disposalOrderService.GetById(disposalOrderId);
    
    // 1. 判断当前用户是否拥有Admin权限(复用你现有的IGT.canAccess校验)
    bool hasAdminAccess = IGT.canAccess(AccessRestrictions.Admin);
    
    // 2. 生成基础状态选项列表(你原本的逻辑)
    var allStatusOptions = new List<SelectListItem>
    {
        new SelectListItem { Text = "待处理", Value = DOStatus.Pending.ToString() },
        new SelectListItem { Text = "处置中", Value = DOStatus.InProgress.ToString() },
        new SelectListItem { Text = "已处置", Value = DOStatus.Disposed.ToString() }
        // 其他状态选项...
    };
    
    // 3. 根据权限和订单状态过滤选项
    if (disposalOrder.Status == DOStatus.Disposed && !hasAdminAccess)
    {
        // 非Admin用户+订单已处置:仅保留"已处置"选项
        ViewBag.statusList = allStatusOptions.Where(opt => opt.Value == DOStatus.Disposed.ToString()).ToList();
    }
    else
    {
        // Admin用户 或 订单未处置:显示全部选项
        ViewBag.statusList = allStatusOptions;
    }
    
    return View(disposalOrder);
}

2. 封装逻辑提升复用性(可选)

如果多个地方都需要类似的权限过滤逻辑,建议把这个判断封装到Config模型中,让代码更整洁:

// 在Config模型中添加静态方法
public static List<SelectListItem> GetAllowedStatusOptions(DOStatus currentOrderStatus, bool isAdmin)
{
    var allOptions = new List<SelectListItem>
    {
        // 基础选项定义...
    };
    
    if (currentOrderStatus == DOStatus.Disposed && !isAdmin)
    {
        return allOptions.Where(opt => opt.Value == DOStatus.Disposed.ToString()).ToList();
    }
    
    return allOptions;
}

然后在控制器里直接调用:

bool hasAdminAccess = IGT.canAccess(AccessRestrictions.Admin);
ViewBag.statusList = Config.GetAllowedStatusOptions(disposalOrder.Status, hasAdminAccess);

3. 确保权限校验的一致性

因为你已经通过RestrictAccessAttribute和IGT.canAccess实现了全局权限校验,这里的判断逻辑和现有体系完全对齐,不会出现权限不一致的问题。同时LdapAuthentication完成认证后,用户的权限信息已经加载到userAccess中,IGT.canAccess可以正确返回校验结果。

这个方案不需要引入新的组件,完全依托你现有的代码结构,改动小且逻辑清晰。

内容的提问来源于stack exchange,提问作者chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:52:40