3

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

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

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

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

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

任何帮助将不胜感激。

4

1 回答 1

3

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

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

于 2013-04-12T16:45:49.297 回答