2018.5.8
2020.1.7

AuthorizeのRolesに複数のロールを設定する

ASP.NET coreでコントローラーやアクションメソッドに対してロールベースの承認を行いたい場合、Authorize属性でRolesを指定しますが、デフォルトでは指定の方法が文字列で、一つのロールならまだしも複数のロールを指定する際はかなり面倒なので、その辺りを解消して実装する方法になります。

コード

方法としてはロール用の属性を用意して、属性に渡した複数のロール用の文字列をstring.Join()で連結したものをRolesにセットしています。

ロール用の属性


public class AuthorizeRolesAttribute : AuthorizeAttribute
{
    public AuthorizeRolesAttribute(params string[] roles) : base()
    {
        Roles = string.Join(",", roles);
    }
}

ロール


public static class Role
{
    public const string Administrator = "Administrator";
    public const string User = "User";
    public const string Guest = "Guest";

    public static string[] GetAll()
    {
        return new[] {
            Administrator,
            User,
            Guest
        };
    }
}

GetAll()メソッドはすべてのロールを取得したかったので追加しているだけなので、必要ないならいりません。

コントローラー


public class SampleController : Controller
{
    [HttpPost]
    [AuthorizeRoles(Role.Administrator, Role.User)]
    public IActionResult Create()
    {
        // ...
    }
}

上記のコードでは、「Administrator」または「User」のロールを所持したユーザーでなければ、SampleコントローラーのCreate()メソッドは呼び出せません。

参考リンク

ASP.NET Core】関連記事