0

そのため、mvc Web サイトの許可を設定しています。そして、私は役割ベースの許可を行っています。コントローラーでアクションを実行するには、アクションの目的に応じて異なる役割が必要になります。最も推奨されるのはauthorizeattribute(ロールをキャッシュしたいので)であることは知っていますが、actionfilterattributeと同じにすることは可能ですか?

現在、次のような actionfilterattribute があります。

public class PermissionRequired : ActionFilterAttribute{
   private readonly Role reqrole;
   public PermissionRequired(Role reqRole)
   {
         reqrole = reqRole;
   }

   public override void OnActionExecuting(ActionExecutingContext filterContext) {
        var ctrl = (GeneralController)filterContext.Controller;

        if (!ctrl.CurrentUser.InRole(reqrole)) {
               //some code to redirect this to a certain page
        }
        base.OnActionExecuting(filterContext);
    }
}

GeneralController で現在のユーザーを取得する

public class GeneralController : Controller

    private User currentUser;
    public User CurrentUser {
        get {
            if (currentUser != null)
                return currentUser;

            int currentUserId = Convert.ToInt32(httpContext.User.identity.Name); 

            if (currentUserId != 0) {
                this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId)
            }

            return currentUser;
        }
    }

およびこの属性を継承するコントローラーで

[PermissionRequired(Role.Moderator)]
public class SomeControllerThatNeedsPermission
{
    [PermissionRequired(Role.SuperAdmin)]
    public ActionResult SomeActionThatNeedsPermission()
      {
      }
}

だから、誰の助けも大歓迎です..コメントや考えも大歓迎です:D

どうもありがとう!

4

1 に答える 1

0

ここではカスタム メンバーシップを使用していないようです。その場合、actionfilter 属性を使用してこれを行うのはやや無意味ですが、それでも可能です。

これは、同じ主題に関する優れた記事です。AuthorizeAttribute を拡張して、役割ベースの検証を実行し、カスタム エラーを返します...

これを行うことの価値は、(記事で説明されているように) 承認が失敗したときに何が起こっているかをユーザーに表示したい場合にのみ見られます (401 は表示されず、mvc 配管で内部的に 302 に変わります)。

于 2011-08-05T20:36:47.073 に答える