9

「管理者」の役割を持つユーザーのみが参加できるように、コントローラーのアクションを保護したいと思います。
役割/メンバーシッププロバイダーを使用することはまったくありません。すべてがカスタムです。
私はこれまでにこれを作りました:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);            
        if (!isAuthorized)
            return false;

        string username = httpContext.User.Identity.Name;

        UserRepository repo = new UserRepository();

        return repo.IsUserInRole(username, "Admin");
    }
}

ここで「管理者」をハードコーディングしたことに注意してください。
これを動的にしたいと思います。
この作品は今:

[CustomAuthorize]
        public ActionResult RestrictedArea()...

しかし、私はこのようなものが欲しいです:

[CustomAuthorize(Roles = "Admin")]
        public ActionResult RestrictedArea()
4

1 に答える 1

20

AuthorizeAttributeRolesこの目的に使用できるプロパティがすでにあります。

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

        string username = httpContext.User.Identity.Name;

        UserRepository repo = new UserRepository();

        return repo.IsUserInRole(username, this.Roles);
    }
}
于 2013-02-23T16:35:50.870 に答える