有没有办法以编程方式更改/创建/添加/删除MVC3中的操作和控制器的身份验证角色

时间:2012-09-07 19:53:39

标签: asp.net asp.net-mvc asp.net-mvc-3 forms-authentication

  

可能重复:
  ASP.NET MVC3 Role and Permission Management -> With Runtime Permission Assignment

假设我在控制器中有ActionResult Members,只允许成员访问它。通常,我只会在操作上添加[Authorize(Roles = "Members")]属性,以便仅允许Members角色中经过身份验证的用户访问它。

我是否可以允许管理员(或其他)在将来更改它,让我们说[Authorize(Roles = "Members, PotentialMembers ")](这将允许角色MembersPotentialMembers中的用户访问这个动作?

由于

2 个答案:

答案 0 :(得分:0)

不,您不能使用AuthorizeAttribute执行此操作。您传递给它的角色很难编译到应用程序中。

但是还有其他方法可以解决这个问题。您可以编写自己的授权过滤器。或者你可以创建一个覆盖OnAuthorization或类似的基类。

答案 1 :(得分:0)

不幸的是,您不能使用默认属性执行此操作。但是,您可以通过继承Authorize来编写自己的属性(或者您可以在Web上轻松获取Authorize的来源)。

从那里开始,您必须设计一种机制,以便a)通过某种接口存储每个控制器允许的角色,以及b)在自定义过滤器属性中使用这些映射来允许/拒绝访问。

如果你这样做,我建议在应用程序启动时加载映射,并使用内存管理器来指示配置更改。