首页 > 解决方案 > 在枚举字段上使用属性过滤器-C#

问题描述

我想知道是否有人可以在这里帮助我。我有一个大的标记枚举,用于设置应用程序权限。问题是,我想根据他们在应用程序中的权限限制谁可以看到什么。我想知道这是否可以通过属性过滤器轻松完成。我熟悉动作过滤器及其有用性,但不熟悉可能执行此操作的其他过滤器。我想将用户可以看到的访问级别限制在他们的级别或更低。第一部分是权限,第二部分是对应用程序的访问级别。

我想做的一个例子是:

人员 A 具有 mc_pm 角色,因此他们可以看到所有内容。

人员 B 具有 bn_pm 角色,因此他们应该只能看到“营、公司和部门”的访问级别。

这是有问题的枚举。

[Flags]
public enum Permissions : int
{
    disabled = 0,
    leadership = 1 << 1,
    personnelManagement = 1 << 2,
    sectionPoc = 1 << 3,
    siteAdministrator = 1 << 4,
    supervisor = 1 << 5,
    user = 1 << 6,
    userAdministrator = 1 << 7,

    majorCommand = 1 << 8,
    brigade = 1 << 9,
    battalion = 1 << 10,
    company = 1 << 11,
    division = 1 << 12,
    section = 1 << 13,

    mc_leadership = majorCommand | leadership,
    mc_pm = majorCommand | personnelManagement,
    mc_ua = majorCommand | userAdministrator,
    mc_su = majorCommand | supervisor,

    bd_leadership = brigade | leadership,
    bd_pm = brigade | personnelManagement,
    bd_su = brigade | supervisor,
    bd_ua = brigade | userAdministrator,

    bn_leadership = battalion | leadership,
    bn_pm = battalion | personnelManagement,
    bn_su = battalion | supervisor,
    bn_ua = battalion | userAdministrator,

    co_leadership = company | leadership,
    co_pm = company | personnelManagement,
    co_su = company | supervisor,
    co_ua = company | userAdministrator,

    s_leadership = section | leadership,
    s_pm = section | personnelManagement,
    s_su = section | supervisor
}

我想如何进行的示例:

    [AllowRoles(mc_pm,mc_ua)]
    majorCommand = 1 << 8,
    [AllowRoles(mc_pm,mc_ua,bd_pm,bd_ua)]
    brigade = 1 << 9,
    [AllowRoles(mc_pm,mc_ua,bd_pm,bd_ua,cn_pm,bn_ua)]
    battalion = 1 << 10,
    [AllowRoles(mc_pm,mc_ua,bd_pm,bd_ua,bn_pm,bn_ua,co_pm,co_ua)]
    company = 1 << 11,
    [AllowRoles(mc_pm,mc_ua,bd_pm,bd_ua,bn_pm,bn_ua,co_pm,co_ua)]
    division = 1 << 12,
    [AllowRoles(mc_pm,mc_ua,bd_pm,bd_ua,bn_pm,bn_ua,co_pm,co_ua)]
    section = 1 << 13,

现在,我知道我可以将枚举分开,但如果没有必要,那会更好。

编辑:上面的枚举将用于为前端用户管理员制作一个多选列表,以便能够授予特定的权限级别。0-7 位移位元素是权限,8-13 位移位项是授予每个权限的访问级别。

标签: c#.netasp.net-mvc

解决方案


推荐阅读