【问题标题】:ASP.NET MVC Authorize user with many rolesASP.NET MVC 授权具有多个角色的用户
【发布时间】:2014-07-14 14:15:35
【问题描述】:

我需要将我的 ASP.NET MVC 应用程序中的控制器授权给具有两个角色的用户。 我正在使用这样的 Authorize 属性:

[授权(角色=“制片人,编辑”)]

但这允许生产者和编辑者控制。我只想允许用户同时拥有两种角色,而不仅仅是其中一种。

我怎样才能做到这一点?

【问题讨论】:

  • 只是让您知道发生这种情况的原因是因为您有设计缺陷。我不确定您的上下文,但请仔细考虑一下。有一些可以采取的行动。您希望该操作只能由既是制作人又是编辑的人执行。我无法想象那是什么。我建议你做一个新的特殊角色(管理员?),或者如果这看起来很愚蠢,那么我想知道上下文(你想要实现的操作是什么?)

标签: c# asp.net asp.net-mvc security authorization


【解决方案1】:

正如问题所述,当多个角色单个Authorize()调用中给出时,如果用户属于任何 em> 列出的角色中,他们将被授予访问权限;就像一个逻辑 OR 运算符。

或者,要实现逻辑AND 运算符的效果,您可以应用Authorize 属性多次。比如..

[Authorize(Roles = "Producer")]
[Authorize(Roles = "Editor")]
public ActionResult Details(int id) {
    // Only available to users who are Producers AND Editors
}

对于上面的示例,只有属于ProducerEditor 角色的用户才能访问操作正文。

Rudi 在 cmets 中指出,这可以让您创建一些相当复杂的访问规则,而无需实现自定义 AuthorizeAttribute。例如,在下面的代码中,用户可以执行操作,前提是:a) Enabled 角色和 b) EditorAdmin 角色。

[Authorize(Roles = "Enabled")]
[Authorize(Roles = "Editor,Admin")]
public ActionResult Details(int id) {
    // Only available to users who are Enabled AND either an Admin OR an Editor
}

我不确定是哪个版本引入的,但它至少在 MVC 4 和 5 中有效。

【讨论】:

  • 这是一个更好的解决方案,也允许更复杂的场景,例如[Authorize(Roles = "EitherThis,OrThis")][Authorize(Roles="ButAlwaysThis")]
【解决方案2】:

你应该做你的自定义AuthorizeAttribute

public class AuthorizeMultipleAttribute : AuthorizeAttribute
{

   //Authorize multiple roles
   public string MultipleRoles { get; set; }

  protected override bool AuthorizeCore(HttpContextBase httpContext)
  {
      var isAuthorized = base.AuthorizeCore(httpContext);
      if (!isAuthorized)
      {                
        return false;
      }

      //Logic here
      //Note: Make a split on MultipleRoles, by ','
      //User is in both roles => return true, else return false
  }

}

演示:

[AuthorizeMultiple(MultipleRoles ="Role1,Role2")]
public class UserController{
}

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 2010-10-21
    • 2013-01-12
    • 2016-10-13
    • 2021-09-04
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多