ASP.NET
ロール管理について

ロール管理は承認の管理に役立ち、アプリケーションでアクセスが許可されているリソース ユーザーを指定できます。ロール管理では、ユーザーを管理者、販売、メンバなどのロールに割り当てることでユーザーのグループを 1 つの単位として扱うことができます。Windows では、管理者 や パワー ユーザー などのグループにユーザーを割り当てることによってロールを作成します。

ロールの設定後、アプリケーション内にアクセス ルールを作成できます。たとえば、サイトにはメンバにだけ表示するページ セットを含めることができます。同様に、現在のユーザーが管理者かどうかによってページの一部を表示または非表示にできます。ロールを使用すると、個々のアプリケーション ユーザーとは無関係にこのような種類のルールを設定できます。たとえば、メンバ専用のページにアクセスする許可をサイトのメンバに個別に与える必要はありません。そうではなく、メンバのロールへのアクセス権を与え、ユーザーがサインアップするときにそのロールからユーザーを単純に追加および削除したり、メンバシップを失効させたりできます。

ユーザーは複数のロールに属することができます。たとえば、サイトがディスカッション フォーラムである場合、一部のユーザーはメンバとモデレータの両方のロールに属する場合があります。各ロールはサイト上で異なる特権を持つように定義できます。その場合、両方のロールに属するユーザーは両方の特権セットを持つことになります。

アプリケーションを使用しているユーザーが数人しかいない場合でも、ロールの作成は有益です。ロールを使用すると、アクセス許可を柔軟に変更でき、サイト全体を変更せずにユーザーを追加および削除できます。アプリケーションに対するアクセス ルールの定義が多くなると、ロールは、ユーザー グループに変更を適用する場合、ますます便利な方法となります。

ロールとアクセス ルール

ロールを作成する主な目的は、ユーザー グループのアクセス ルールを簡単に管理できるようにすることです。ユーザーを作成し、ユーザーをロール (Windows の場合はグループ) に割り当てます。一般的な使用法としては、次に特定のユーザーに制限するページ セットを作成します。多くの場合、これらの制限されたページだけを別のフォルダに入れて分離します。次に、Web サイト管理ツールを使用して制限されたフォルダへのアクセスを許可および拒否するルールを定義します。たとえば、メンバか管理者だけが制限されたフォルダ内のページにアクセスでき、その他のすべてのユーザーはアクセスを拒否されるようにサイトを設定できます。承認されていないユーザーが制限されたページを表示しようとすると、エラー メッセージが表示されるか、または指定したページにリダイレクトされます。

ロール管理、ユーザー ID、およびメンバシップ

ロールを使用するには、ユーザーが特定のロールに属するかどうかを判断できるようにアプリケーション内でユーザーを識別できる必要があります。ユーザー ID を作成するようにアプリケーションを構成できます。これには Windows 認証とフォーム認証の 2 とおりの方法があります。アプリケーションがローカル エリア ネットワーク (つまり、ドメイン ベースのイントラネット アプリケーション) で動作する場合は、Windows ドメイン アカウント名を使用してユーザーを識別できます。その場合、ユーザーのロールはユーザーが属している Windows グループです。

Windows アカウントの使用が実用的ではないインターネット アプリケーションやその他のシナリオでは、フォーム認証を使用してユーザー ID を作成できます。この作業の場合、通常、ユーザーがユーザー名とパスワードを入力し、ユーザーの資格情報を検証できるページを作成します。この作業のほとんどは ASP.NET Login コントロールによって自動的に実行できます。また、ログイン ページを作成し、FormsAuthentication クラスを使用してユーザー ID を作成することもできます。

Noteメモ :

ロールはアプリケーション内に ID を作成していないユーザー (匿名ユーザー) には使用できません。

Login コントロールまたはフォーム認証を使用してユーザー ID を作成している場合、ロール管理をメンバシップと組み合わせて使用することもできます。このシナリオでは、メンバシップを使用してユーザーとパスワードを定義します。次にロール管理を使用してロールを定義し、これらのロールにメンバシップ ユーザー ID を割り当てます。ただし、ロール管理はメンバシップに依存しません。アプリケーション内にユーザー ID を設定する方法がある限り、ロール管理は承認に使用できます。

ロール管理 API

ロール管理はページまたはフォルダへの権限を制限するだけではありません。ロール管理は、ユーザーがロールに属するかどうかをプログラムで決定するために使用できる API も提供します。これにより、ロールを利用するコードを記述して、ユーザーがだれであるかだけでなく、ユーザーが属するロールにも基づいてアプリケーション作業を実行できます。

アプリケーションでユーザー ID を作成した場合、ロールの作成、ロールへのユーザーの追加、およびどのユーザーがどのロールに属するかに関する情報の取得を実行するロール管理 API メソッドを使用できます。これらのメソッドによって、ロール管理用の独自のインターフェイスを作成できます。

アプリケーションが Windows 認証を使用している場合、ロール管理 API が提供するロール管理機能は少なくなります。たとえば、ロール管理を使用して新しいロールを作成することはできません。代わりに、Windows ユーザーとグループ管理を使用してユーザー アカウントとグループを作成し、ユーザーをグループに割り当てます。これで、ロール管理によって Windows ユーザーとグループの情報が読み込まれるため、認証に使用できます。

ASP.NET ロール管理のしくみ

ロール管理を使用するには、まずこれを有効にし、オプションとしてロールを利用できるアクセス ルールを設定します。これで、実行時にロール管理機能を使用してロールを操作できます。

Noteメモ :

Web サイト管理ツールを使用すると、ロール管理の設定、ロールの定義、ユーザーのロールへの追加、およびアクセス ルールの作成を簡単に行うことができます。

ロール管理の設定

ASP.NET ロール管理を使用するには、次のような設定を行ってアプリケーションの Web.config ファイル内で ASP.NET ロールを有効にします。

<roleManager 
    enabled="true" 
    cacheRolesInCookie="true" >
</roleManager>

ロールの一般的な用途には、ページまたはフォルダへのアクセスを許可または拒否するルールの設定があります。そのようなアクセス ルールは Web.config ファイルの authorization 要素 (ASP.NET 設定スキーマ) セクションで設定できます。次の例では、メンバのロールに属するユーザーは memberPages というフォルダ内のページの表示を許可され、それ以外のユーザーのアクセスはすべて拒否されます。

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

アクセス ルールの設定の詳細については、「ASP.NET の承認」を参照してください。

また、管理者やメンバなどのロールを作成し、ロールにユーザー ID を割り当てる必要もあります。アプリケーションが Windows 認証を使用している場合は、Windows のコンピュータ管理ツールを使用してユーザーとグループを作成します。

フォーム認証を使用する場合、ユーザーとロールを設定する最も簡単な方法は、ASP.NET Web サイト管理ツールを使用することです。また、この作業は各種のロール管理者メソッドを呼び出すことでプログラムから実行することもできます。members ロールを作成する方法を次のコード例に示します。

Visual Basic
Roles.CreateRole("members")
C#
Roles.CreateRole("members");

JoeWorden というユーザーを manager ロールに単独で追加する方法、および JillShrader と ShaiBassli というユーザーを members ロールに一度に追加する方法を次のコード例に示します。

Visual Basic
Roles.AddUsersToRole("JoeWorden", "manager")
Dim userGroup(2) As String
userGroup(0) = "JillShrader"
userGroup(1) = "ShaiBassli"
Roles.AddUsersToRole(userGroup, "members")
C#
Roles.AddUsersToRole("JoeWorden", "manager");
string[] userGroup = new string[2];
userGroup[0] = "JillShrader";
userGroup[1] = "ShaiBassli";
Roles.AddUsersToRole(userGroup, "members");

実行時のロールの使用

実行時にユーザーがサイトを参照する場合、ユーザーは Windows アカウント名として、またはアプリケーションにログインすることによって、ID を作成します。(インターネット サイトでは、ユーザーがログインせずに、つまり匿名でサイトを参照した場合、ユーザーにはユーザー ID が与えられないため、ユーザーはどのロールにも属さないことになります)。ログインしたユーザーの情報は、User プロパティからアプリケーションで使用できます。ロールが有効になると、ASP.NET は現在のユーザーのロールを検索し、これらを確認できるように User オブジェクトに追加します。現在のユーザーがメンバのロールに属するかどうかを判断し、ロールに属する場合にメンバのボタンを表示する方法を次のコード例に示します。

Visual Basic
If User.IsInRole("members") Then
   buttonMembersArea.Visible = True
End If
C#
if (User.IsInRole("members"))
{
   buttonMembersArea.Visible = True;
;

また、ASP.NET も RolePrincipal クラスのインスタンスを作成し、これを現在の要求コンテキストに追加するため、どのユーザーが特定のロールに属しているかを判断するなどのロール管理作業をプログラムで行うことができます。. 現在ログインしているユーザーのロールのリストを取得する方法を次のコード例に示します。

Visual Basic
Dim userRoles() as String = CType(User, RolePrincipal).GetRoles()
C#
string[] userRoles = ((RolePrincipal)User).GetRoles();

アプリケーションで LoginView コントロールを使用している場合、このコントロールはユーザーのロールを確認し、ユーザーのロールに基づいてユーザー インターフェイスを動的に作成できます。

ロール情報のキャッシュ

ユーザーのブラウザが Cookie を有効にしている場合、ASP.NET はオプションでユーザーのコンピュータの暗号化された Cookie にロール情報を格納できます。各ページの要求時に ASP.NET は Cookie を読み取り、そのユーザーのロール情報を Cookie から取得します。この方法では、ロール情報をデータベースから読み取る必要を最小限に抑えることができます。ユーザーのブラウザが Cookie をサポートしていない、または Cookie が無効になっている場合、ロール情報は各ページ要求が存続している間だけキャッシュされます。

参照

タグ :


Page view tracker