0

これはこの質問には簡単かもしれませんが、答えは私が探しているものではありません。

私が望むかもしれないより近い質問は、この SO questionです。

状況は、私が使用していて、SimpleMemberShip プロバイダーを使用する ASP.NET MVC4 アプリケーションです。Active Directory 内の好きな場所に基づいて役割を定義しています。そのため、ログインとユーザー アクセスは、AD 内に住んでいる OU/グループに基づいています。彼らがログインするとき、私はこのようなことをします:

カスタムログインインターフェースのコンストラクターで

static UserAuthenticationManager()
    {
        //Create some roles for SimpleMembership 
        if (!Roles.RoleExists("IT"))
            Roles.CreateRole("IT");
        if (!Roles.RoleExists("Student"))
            Roles.CreateRole("Student");
        if (!Roles.RoleExists("Faculty"))
            Roles.CreateRole("Faculty");
        if (!Roles.RoleExists("Adjunct"))
            Roles.CreateRole("Adjunct");
    }

これは、イントラネット アプリがさまざまな部門に開かれるにつれて、時間の経過とともに (実質的に) 拡大します。

これが私が役割を割り当てる方法です

if (StaffAd.UserIsInGroup(username, "IT"))
            Roles.AddUserToRole(username, "IT");
        if (StaffAd.UserIsInGroup(username, "Faculty"))
            Roles.AddUserToRole(username, "Faculty");
        if (StaffAd.UserIsInGroup(username, "Adjunct Faculty Current"))
            Roles.AddUserToRole(username, "Adjunct");
        if (StaffAd.UserIsInGroup(username, "Active_Student"))
            Roles.AddUserToRole(username, "Student");

この「UserIsInGroup()」メソッドは、ユーザー名とユーザーがグループの一部であることを確認する AD の名前を取得します。

私が懸念している問題は、

  1. Roles のコンストラクターは非常に長くなります。
  2. 割り当てられた役割も長くなります。また、ユーザーは複数のグループに属する可能性があります。
  3. Authorize 属性も大幅に増加します。

懸念番号 3 の例:

[Authorize(Roles = "IT, DegreeTracker, Student")]

ロールの変更などのいくつかの障害に遭遇しないようにしたいと考えています (おそらく、コードを追加して、ユーザーのロールを確認し、ログインするたびに最新のものに更新するだけです)。多くの役割。「DegreeTracker」と「Student」は両方とも AD グループであるため、2 つの子ロールの親ロールである「DegreeUsers」というロールを定義できます。

状況を管理し、コードをきれいに保つための賢明な方法のように思えますか? もしそうなら、Authorize 属性をオーバーライドする方法はありますか?

4

1 に答える 1

1

セキュリティ設計をアプリケーション設計から切り離す方法については、こちらの記事をご覧ください。このシナリオではうまく機能する可能性があると思います。この記事では、SimpleMembership データベースを拡張し、リソースと操作をロールではなくパラメーターとして受け入れるカスタム承認属性を作成する方法を示します。この場合、リソースは Active Directory の組織単位になります。その後、すべてのコードを調べて承認属性を変更し、再コンパイルして再デプロイする代わりに、データベース内のリソース/操作へのロールのマッピングを変更できます。

于 2013-08-15T14:52:14.943 に答える