2

私はMVC4で特注のWebシステムを書いています。このシステムの一部では、システムの特定の領域へのアクセスと権限を提供するために、管理者ユーザーが会社の役割とユーザーを管理する必要があります。システムには、システム内にモジュールがあります:

販売 生産

管理チームは、システムで役割を作成し、それらの役割に権限を適用する機能を望んでいます。たとえば、Sales ロールは本番へのアクセスを拒否されますが、Sales Manager は Production への読み取り専用アクセスを持つことができます。

単一の管理画面でこれを管理するための最良のアプローチの例を探しています。管理者は

  • 役割を作成する
  • ユーザーの作成
  • 役割を割り当てる
  • システム内のモジュールとアクションにロール権限を割り当てます

また、役割を動的に割り当てる必要があるため、コントローラーレベルでどのように実装しますか?

[Authorize(Roles="Sales")] // needs to be dynamic
public ActionResult SalesIndex(){

    return View();

}

任意のアイデアをいただければ幸いです

ありがとう

4

2 に答える 2

3

AuthorizeAttributeこのようなカスタムを作成する必要があります

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var userIdentity = httpContext.User.Identity;

        if (!userIdentity.IsAuthenticated)
            return false;

        var rd = httpContext.Request.RequestContext.RouteData;
        string currentAction = rd.GetRequiredString("action");
        if(currentAction == "SalesIndex") 
        {
            return IsUserIsInRoleForTheView(userIdentity.Name);    
        }

        return true;
    }
}

[CustomAuthorize] 
public ActionResult SalesIndex()
{
    return View();
}
于 2013-03-11T13:38:58.883 に答える
0

これを行う 1 つの方法は、2 つのレベルのロールを持つデータ モデルを用意することです。

  • GroupRoles (例: Sales)。ユーザーはグループ ロールのメンバーです。つまり、MN 関係のユーザー - グループロールがあります。

  • PermissionRoles。アプリケーションによって制御されるリソース、アクション、またはリソースに対するきめ細かいアクセス許可を表します。GroupRoles と PermissionRoles の間には MN 関係があります。

次に、Users を GroupRoles に、GroupRoles を PermissionRoles に割り当てるためのカスタム管理 UI を用意します。

また、このモデルを「フラット化」するカスタムRoleProviderGetRolesForUserも用意します。つまり、メソッドはユーザーのすべての PermissionRoles を (ユーザーの GroupRole メンバーシップを介して) 返します。

その後、標準の .NET API を承認に使用でき、カスタムの Authorize 属性は必要ありません。

[Authorize(Roles="SomeAction")] // for an MVC Controller

[PrincipalPermission(SecurityAction.Demand, Role = "SomeAction")] // For a method in the BLL

Thread.CurrentPrincipal.IsInRole("SomeAction") // in code
于 2013-09-29T17:42:09.840 に答える