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()メソッドは呼び出せません。