2

カスタム許可システムを新しい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内から自分のカスタムメソッドを呼び出すことは不可能ですか?

4

2 に答える 2

3

役割プロバイダーをカスタムタイプとしてキャストできます。これにより、メソッドにアクセスできるようになります。ただし、関数はインターフェイスの外部にあるため、これにより、アプリケーションがロールプロバイダーに緊密に結合されます。これは、おそらく目的には問題ありません。

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);
于 2010-02-08T18:10:46.677 に答える
1

私はそれがあるべきだと思います:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
于 2011-03-29T13:26:27.710 に答える