1

私が知っている唯一の場所は、属性RoleProviderを使用するときです。Authorize他にどこでを使用でき、RoleProviderロールを具体的に参照する可能性のある場所以外の場所で呼び出されますか(ログインコントロールが自動的にMembershipProviderを使用する方法と同様に考えています)

別の言い方をすれば、独自の役割管理レイヤーを作成しても、実際のRoleProviderコントラクトを実装しない場合、ASP.NETのどの組み込み機能が失われるのでしょうか。

4

2 に答える 2

2

組み込みのRoleProviderが付加価値をもたらすいくつかの方法を次に示します。

1:LoginViewコントロールはロールを使用して、さまざまなコンテンツをさまざまなロールに表示できるようにします。これを行うためにRoleProviderにフックします。

LoginViewコントロールでロールを使用する例:

<asp:LoginView id="LoginView1" runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="author">
            <ContentTemplate>
                some content here based on if user is in 'author' role....
            </ContentTemplate>
        </asp:RoleGroup>
        <asp:RoleGroup Roles="editor">
            <ContentTemplate>
                some content here based on if user is in 'editor' role....
            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

2:次のようなweb.config設定により、サーバー上の物理パス(サブフォルダーなど)へのアクセスを許可できます。

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members, administrators" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

3:ユーザーの役割を簡単に検出し、次のようなコードでアクションを実行できます。

if (User.IsInRole("members"))
{
   //do something
}
else
{
   //do something else
}

リストはどんどん増えていきます。この議論は正直に何度も行われてきました。独自の役割システムを作成して車輪の再発明をしないでください。抽象ロールプロバイダーを実装するだけで、それで完了します。これは、 ASP.NETでの役割管理の背景に関する優れた記事です。

編集:MVCでRoleProviderがどのように役立つかを実際に知りたいことを明確にした後、探しているものは次のとおりです。

ASP.NET MVC-ロールプロバイダーの代替?

于 2011-05-27T18:53:09.923 に答える
0

あなたの質問に対する率直な答えは「いいえ」です。RoleProviderまたはその他のプロバイダーは、ASP.Netのメインストリームパイプラインに参加しません。ASP.Net要求は、要求を満たすためにRoleProviderを必要としません。

技術資料を載せるのではなく、もっと哲学的な答えを出して、KPの努力を尊重したいと思います。

RoleProviderは、基本的にASP.Netの機能アドオンであり、実行時に機能の詳細を知らなくても、役割システムに対して作業できます。ASP.Net 2.0は、ユーザーとロールを処理するまったく新しい方法を導入しました。次に、統合されたユーザーと役割の管理を提供するのではなく、拡張可能でありながら使いやすいものにすることを決定しました。彼らは「プロバイダー」と呼ばれる新しいパターンを作成し、ユーザー、役割、セッションなどの機能ごとにデフォルトのプロバイダーを出荷しました。それらは、MembershipProvider、RoleProvider、およびSessionProviderとして知られています。ただし、Microsoftは、ASP.Net2.0に付属のプロバイダーのみを使用するように制限していません。独自のMembershipProviderを定義し、web.configでデフォルトプロバイダーとして宣言できます。ProviderBaseクラスは、各メソッドを実装して、提供をまとまりのあるものにするように強制します。web.configからデフォルトにする場合、実行時に、システムにある可能性のあるターゲットプロバイダーの詳細を知る必要はありません。クライアントコードは、特定のプロバイダー間で一貫しています。

お役に立てれば。

于 2011-05-30T14:58:31.590 に答える