-2

MVCアプリケーションでは、スーパー管理者がアプリケーション内のさまざまなモジュールの権限を与える権限を与えたいと考えています。権限がMVC5のデータベースから取得する必要がある認証および認証の属性

  1. 役割、
  2. 権限(すなわち閲覧、作成、アルター、削除)(これはModuleIDはと権限を格納)、
  3. ModuleMaster(コントローラ名を格納し、ACTIONNAME):このために私は3つのテーブルを持っています。

ここでは、すべてのコントローラとそのアクションが許可テーブルのアクセス許可を持っているので、それをフィルタリングしたいと思います。そして、私はデータベースから値を取得し、次に属性に送る必要があります。

しかし、私はこの動的認証機能のために何も取得していません。

答えて

0

最後に、私の質問の解決策を得ました。 これは、AuthorizeAttributeを継承してからOnAuthorizationをオーバーライドするattestという名前の新しい属性を追加することで行いました。 まず、特定のユーザが、trueまたはfalseを返す特定のコントローラの呼び出されたActionにアクセスする権限を持っているかどうかをチェックするクラスを作成しました。 次に、ユーザーの役割に特定の操作の権限がある場合、AttestAttributeでこれを呼び出し、通常の機能が実行されますが、そうでなければエラーページにリダイレクトできます。

public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var parameters = filterContext.ActionDescriptor.GetParameters(); 
     var values = parameters.Select(s => new 
     { 
      Name = s.ParameterName, 
      Value = filterContext.HttpContext.Request[s.ParameterName] 
     }); 

     string ControlerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
     AppUser requestingUser = new AppUser(Convert.ToInt32(filterContext.RequestContext.HttpContext.Session["ssnRolekey"])); 
     if (!requestingUser.HasPermission(oper, ControlerName)) 
      { 
       filterContext.Result = new RedirectToRouteResult(
              new RouteValueDictionary { 
              { "action", "UnauthorizedUser" }, 
              { "controller", "Account" } }); 
      } 
    } 

    public AttestAttribute(string permission) 
    { 
     this.oper = permission; 
    } 
関連する問題