我正在使用asp.net网页的现有代码,其中控制器中的方法根据用户所处的角色而受到限制,例如:

    namespace Principal.Controllers
    {
       [Authorize]
       public class MyController: Controller
       {
          [Authorize(Roles = "Role1,Role2,Role3")]
          public method1() {...}
       }
    }


问题是声明允许的角色的部分:

    [Authorize(Roles = "Role1,Role2,Role3")]


我想使字符串动态化,因此我可以根据管理员设置的属性从方法返回它,但是它总是给我带来奇怪的错误,例如“错误3属性参数必须是常量表达式,typeof表达式或属性参数类型的数组创建表达式”

任何帮助将不胜感激。

最佳答案

如您所见,您只能在定义属性时使用常量。这是因为该属性已编译到代码中-您不能使用编译器在编译时不知道的表达式。

相反,您可以做的是创建一个继承自AuthorizeAttribute类并覆盖OnAuthorize的新属性。然后,您可以在此处实现自定义角色逻辑。

关于c# - 对用户的动态权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15976672/

10-10 07:46