0

mvcウェブサイトの許可を設定しています。そして、私は役割ベースの許可をしています。コントローラ内のアクションには、アクションの目的に応じて異なるロールが必要です。 私が知っていることは、authorizeattribute(キャッシュされた役割が必要なので)が推奨されますが、actionfilter属性で同じ属性を持つことは可能ですか?mvcロールベースのアクセス許可(actionfilterattributeを使用)

現在、私はこれに似actionfilterattributeあります

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() 
     { 
     } 
} 
を継承するコントローラ上で、現在のユーザーを取得するために

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上を

だから、誰でも助けていただければ幸いです。再歓迎:D

ありがとう!

+0

私はこれに似たものを書いてSourceForgeに張り付きました。それは時間を節約するかもしれません。 https://sourceforge.net/projects/simplerolesecur/ –

+2

(これは実際の解決策ではないので、これはコメントです)素晴らしいブログ投稿がありますので、心に留めておくか、[こちら](http:// blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx)。私はそれが最近のプロジェクトで非常に有用であると感じました。 –

+0

@rick liddle:これは非常に参考になる記事です。ありがとう! - ジェレミー:私はそれを見ます:) – gdubs

答えて

0

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

This is an excellent article - 役割ベースの検証を実行し、カスタムエラーを返すようにAuthorizeAttributeを拡張...

(記事で説明したように)だけに出くわすことをやっての値あなたが表示したいですユーザが何をしているのかが認証に失敗したとき(401がMvc配管内で302に変わることはわかりません)

関連する問題