これはこの質問には簡単かもしれませんが、答えは私が探しているものではありません。
私が望むかもしれないより近い質問は、この 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 の名前を取得します。
私が懸念している問題は、
- Roles のコンストラクターは非常に長くなります。
- 割り当てられた役割も長くなります。また、ユーザーは複数のグループに属する可能性があります。
- Authorize 属性も大幅に増加します。
懸念番号 3 の例:
[Authorize(Roles = "IT, DegreeTracker, Student")]
ロールの変更などのいくつかの障害に遭遇しないようにしたいと考えています (おそらく、コードを追加して、ユーザーのロールを確認し、ログインするたびに最新のものに更新するだけです)。多くの役割。「DegreeTracker」と「Student」は両方とも AD グループであるため、2 つの子ロールの親ロールである「DegreeUsers」というロールを定義できます。
状況を管理し、コードをきれいに保つための賢明な方法のように思えますか? もしそうなら、Authorize 属性をオーバーライドする方法はありますか?