c# - 用户的动态权限

标签 c# asp.net-mvc-4

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

    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/

相关文章:

c# - EF 6 与 EF 5 部署到 IIS8 时的相对性能问题

javascript - 处理 AJAX 返回上的 MVC 验证错误消息

c# - C#中的委托(delegate)和事件有什么区别?

c# - 从泛型引用类型 <T> 获取枚举或静态属性

asp.net-mvc-4 - Angular.js 和 ASP.NET MVC 4

asp.net - 设置输入类型 = "File"HTML5 父目录

.net - 运行 "Identity and Access"向导后,带有 VS 2012 的 MVC4 应用程序中的 Principal 是 RolePrincipal 而不是 ClaimsPrincipal

javascript - 是否可以获取 View 上每个 div 的坐标并将它们保存在 javascript onunload() 函数中的本地存储中?

c# - 验证大整数的二进制模式 (BigInteger)

c# - Web API 中的电子邮件确认