309

現在、「メンバー」がコントローラーアクションにアクセスできるように、このようなメソッドを装飾しています

[Authorize(Roles="members")]

複数のロールを許可するにはどうすればよいですか? たとえば、次は機能しませんが、私がやろうとしていることを示しています (「メンバー」と「管理者」アクセスを許可します):

[Authorize(Roles="members", "admin")] 
4

11 に答える 11

645

別のオプションは、投稿したときに単一の承認フィルターを使用することですが、内部の引用符を削除することです.

[Authorize(Roles="members,admin")]
于 2009-10-01T13:14:00.350 に答える
152

カスタム ロールを使用する場合は、次のようにします。

CustomRolesクラス:

public static class CustomRoles
{
    public const string Administrator = "Administrador";
    public const string User = "Usuario";
}

使用法

[Authorize(Roles = CustomRoles.Administrator +","+ CustomRoles.User)]

役割が少ない場合は、次のように (わかりやすくするために) 組み合わせることができます。

public static class CustomRoles
{
     public const string Administrator = "Administrador";
     public const string User = "Usuario";
     public const string AdministratorOrUser = Administrator + "," + User;  
}

使用法

[Authorize(Roles = CustomRoles.AdministratorOrUser)]
于 2012-05-23T15:32:34.653 に答える
4

AspNetCore 2.x を使用する場合は、少し異なる方法を使用する必要があります。

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class AuthorizeRoleAttribute : AuthorizeAttribute
{
    public AuthorizeRoleAttribute(params YourEnum[] roles)
    {
        Policy = string.Join(",", roles.Select(r => r.GetDescription()));
    }
}

次のように使用してください:

[Authorize(YourEnum.Role1, YourEnum.Role2)]
于 2018-10-18T18:39:41.643 に答える
3

別の明確な解決策として、定数を使用して規則を維持し、複数の [Authorize] 属性を追加できます。これをチェックしてください:

public static class RolesConvention
{
    public const string Administrator = "Administrator";
    public const string Guest = "Guest";
}

次に、コントローラーで:

[Authorize(Roles = RolesConvention.Administrator )]
[Authorize(Roles = RolesConvention.Guest)]
[Produces("application/json")]
[Route("api/[controller]")]
public class MyController : Controller
于 2017-02-22T00:19:44.687 に答える
3

サブクラスを追加してコードを改善するAuthorizeRole.cs

    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
    class AuthorizeRoleAttribute : AuthorizeAttribute
    {
        public AuthorizeRoleAttribute(params Rolenames[] roles)
        {
            this.Roles = string.Join(",", roles.Select(r => Enum.GetName(r.GetType(), r)));
        }
        protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAuthenticated)
            {
                filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary {
                  { "action", "Unauthorized" },
                  { "controller", "Home" },
                  { "area", "" }
                  }
              );
                //base.HandleUnauthorizedRequest(filterContext);
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary {
                  { "action", "Login" },
                  { "controller", "Account" },
                  { "area", "" },
                  { "returnUrl", HttpContext.Current.Request.Url }
                  }
              );
            }
        }
    }

これを使用する方法

[AuthorizeRole(Rolenames.Admin,Rolenames.Member)]

public ActionResult Index()
{
return View();
}
于 2016-01-27T07:20:44.083 に答える