c# - 在枚举字段上使用属性过滤器-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 位移位项是授予每个权限的访问级别。
解决方案
推荐阅读
- python - Python导入麻烦
- c++ - 在 Windows 10 中的捕获客户端上使用 IAudioClient2::SetClientProperties 的预期效果是什么?
- java - 如何将 SpringBootTest 与 Web 安全和 Service usnig Junit5 和 Mockito 一起使用?
- php - 在 PHP 中 6 次登录尝试失败后如何阻止用户 40 分钟
- javascript - 上传图片并更改现有图片的来源
- python - 在 Pandas Dataframe 中创建总计行
- html - Jquery 从隐藏开始并在搜索过滤器上显示一定数量的元素
- python - Python Dash Plotly : .. 返回了一个不可 JSON 序列化的值 (InvalidCallbackReturnValue)
- ansible - 获取注册 stdout_lines 并删除空间
- c++ - Linux gcc 链接问题