カスタム許可システムを新しいASP.NETMVCアプリに接着したいと思います。アプリ用に独自のカスタムAuthorizeAttributeを作成するために、かなりの作業を行いました。また、独自のカスタムMembershipProviderおよびRoleProvider実装を作成しました。ユーザーが属している役割を確認する必要があるまで、これらすべてがうまく機能します。これをすべて行ったので、コントローラーでこれを簡単に行うことができ、VS2010のデフォルトのMVCテンプレートを使用して、コードをプロトタイプとしてレトロフィットしました。
[CustomAuth(Roles='X')]
public ActionResult DoSomething()
私のカスタムシステムは少し風変わりです。SQLデータベースを呼び出さない。これは、CheckPassword、GetPermissions、WebLoginの3つのメソッドを提供する単純なWebサービスです。WebLoginは、CheckPasswordとGetPermissionsの両方を1つの呼び出しにラップするだけです。ValidateUser内からWebLoginを使用しても機能しなかった場合、MembershipProvider.ValidateUser(userName、password)内からTestPasswordを呼び出しました。この呼び出しが成功すると、UserIDが返されます。それ以外の場合は失敗し、NULLが返されます。
問題は、RoleProviderの実装を呼び出すときです。抽象クラスは、userNameの単一パラメーターを使用してGetRolesForUserを定義しました。GetPermissions()メソッドが機能するには、複数のuserNameが必要です。それは次のように定義されます:
GetPermissions(privateKey,userName)
明らかに、次のRoleProviderメソッド内からこれを呼び出すことは機能しません。そのままサポートされているメソッドにprivateKeyを渡すことができません。
public override string[] GetRolesForUser(string username)
自分のカスタムRoleProvider内から自分のカスタムメソッドを呼び出すことは不可能ですか?