对用户的动态权限

本文关键字:权限 动态 用户 | 更新日期: 2023-09-27 18:08:47

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

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

问题在于允许的角色被声明的部分:

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

我想使字符串动态,所以我可以从一个方法返回它取决于由管理员设置的属性,但它一直给我奇怪的错误,如"错误3属性参数必须是一个常量表达式,表达式的类型或数组创建表达式的属性参数类型"

对用户的动态权限

正如您所发现的,您只能在定义属性时使用常量;这是因为属性被编译到代码中——你不能使用编译器在编译时不知道的表达式。

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