gpt4 book ai didi

c# - 在属性和方法之间共享角色属性的初始化

转载 作者:太空狗 更新时间:2023-10-30 01:25:12 24 4
gpt4 key购买 nike

我有一个权限属性,它采用角色的枚举值列表:

    [CheckRoles(SystemRole.ID.Admin, SystemRole.ID.User)]
public class MyController : Controller
{
....
}

但是,在代码的其他部分,我想检查用户是否处于这些角色中的任何一个,以便我可以转到正确的页面。所以代码看起来像这样:

if (roles.IsInAnyRoles(user, SystemRole.ID.Admin, SystemRole.ID.User)
{
... Do something in MyController ...
}

你可以在这里看到重复。我真的很想在变量或初始化列表或其他东西中拥有这两个角色,我可以将它们传递给属性和方法。创建 const 数组不起作用。有没有办法做到这一点?我可以以某种方式存储数组初始化程序吗?

如有任何帮助,我们将不胜感激!

更新

我已将角色枚举设为 Flags 枚举(并为项目赋予适当的值)。这意味着我可以或将这些值组合起来给出一个单一的常量值。我现在可以在属性和方法中使用该常量值。感谢下方的 Danny Chen。

最佳答案

在我的实际项目经历中,我想这样定义角色;

[Flags]
public enum Role
{
Staff = 0,
Supervisor = 1,
Manager = 2,
Admin = 4,
HelpDesk = 8
}

原因是一个帐户通常关联几个角色,例如某人是 Bob 的主管,也是 IT 部门的经理。在这种情况下,他的角色是 Role.Supervisor | Role.Manager,这样他就可以使用Role.Supervisor提供的所有功能(比如批准Bob的离职申请),同时他可以批准所有IT部门员工的离职申请。 Action 看起来像:

[CheckRole(Role.Supervisor, Role.Manager)]
public ActionResult ApproveLeavingRequest()
{
//the roles in the constructor of CheckRoleAttribute are OR related
}

[CheckRole(Role.Manager|Role.Supervisor, Role.Admin)]
public ActionRequest ModifySystemSettings()
{
//this method is provided to a small group of people
//those who is a manager and a supervisor
//or he is an admin
}

[CheckRole(Role.Manager|Role.Supervisor|Role.Admin)]
//maybe we need to add Role.Boss into the system :)
public ActionRequest IncreasePay()
{
//only the boss account can invoke this method
}

希望这对您有所帮助。

关于c# - 在属性和方法之间共享角色属性的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com