ロール管理について
更新 : 2007 年 11 月
ロール管理は承認の管理に役立ち、アプリケーションでアクセスが許可されているリソース ユーザーを指定できます。ロール管理では、ユーザーを管理者、販売、メンバなどのロールに割り当てることでユーザーのグループを 1 つの単位として扱うことができます。Windows では、管理者やパワー ユーザーなどのグループにユーザーを割り当てることによってロールを作成します。
ロールの設定後、アプリケーション内にアクセス ルールを作成できます。たとえば、サイトにはメンバにだけ表示するページ セットを含めることができます。同様に、現在のユーザーが管理者かどうかによってページの一部を表示または非表示にできます。ロールを使用すると、個々のアプリケーション ユーザーとは無関係にこのような種類のルールを設定できます。たとえば、メンバ専用のページにアクセスする許可をサイトのメンバに個別に与える必要はありません。代わりに、メンバのロールへのアクセス権を与え、ユーザーがサインアップするときにそのロールからユーザーを単純に追加および削除したり、メンバシップを失効させたりできます。
ユーザーは複数のロールに属することができます。たとえば、サイトがディスカッション フォーラムである場合、一部のユーザーはメンバとモデレータの両方のロールに属する場合があります。各ロールはサイト上で異なる権限を持つように定義できます。その場合、両方のロールに属するユーザーは両方の権限セットを持つことになります。
アプリケーションを使用しているユーザーが数人しかいない場合でも、ロールの作成は有益です。ロールを使用すると、アクセス許可を柔軟に変更でき、サイト全体を変更せずにユーザーを追加および削除できます。アプリケーションに対するアクセス ルールの定義が多くなると、ロールは、ユーザー グループに変更を適用する場合、ますます便利な方法となります。
ロールとアクセス ルール
ロールを作成する主な目的は、ユーザー グループのアクセス ルールを簡単に管理できるようにすることです。ユーザーを作成し、ユーザーをロール (Windows の場合はグループ) に割り当てます。一般的な使用法としては、次に特定のユーザーに制限するページ セットを作成します。多くの場合、これらの制限されたページだけを別のフォルダに入れて分離します。これで、制限されたフォルダへのアクセスを許可および拒否するルールを設定できます。たとえば、メンバか管理者だけが制限されたフォルダ内のページにアクセスでき、その他のすべてのユーザーはアクセスを拒否されるようにサイトを設定できます。承認されていないユーザーが制限されたページを表示しようとすると、エラー メッセージが表示されるか、または指定したページにリダイレクトされます。
ロール管理、ユーザー ID、およびメンバシップ
ロールを使用するには、ユーザーが特定のロールに属するかどうかを判断できるようにアプリケーション内でユーザーを識別できる必要があります。ユーザー ID を作成するようにアプリケーションを構成できます。これには Windows 認証とフォーム認証の 2 とおりの方法があります。アプリケーションがローカル エリア ネットワーク (つまり、ドメイン ベースのイントラネット アプリケーション) で動作する場合は、Windows ドメイン アカウント名を使用してユーザーを識別できます。その場合、ユーザーのロールはユーザーが属している Windows グループです。
Windows アカウントの使用が実用的ではないインターネット アプリケーションやその他のシナリオでは、フォーム認証を使用してユーザー ID を作成できます。この作業の場合、通常、ユーザーがユーザー名とパスワードを入力し、ユーザーの資格情報を検証できるページを作成します。この作業のほとんどは ASP.NET Login コントロールによって自動的に実行できます。また、ログイン ページを作成し、FormsAuthentication クラスを使用してユーザー ID を作成することもできます。
メモ : |
---|
ロールはアプリケーション内に ID を作成していないユーザー (匿名ユーザー) には使用できません。 |
Login コントロールまたはフォーム認証を使用してユーザー ID を作成している場合、ロール管理をメンバシップと組み合わせて使用することもできます。このシナリオでは、メンバシップを使用してユーザーとパスワードを定義します。次にロール管理を使用してロールを定義し、これらのロールにメンバを割り当てます。ただし、ロール管理はメンバシップに依存しません。アプリケーション内にユーザー ID を設定する方法がある限り、ロール管理は承認に使用できます。
ロール管理と ASP.NET ロール サービス
ASP.NET ロール サービスを使用して、WCF (Windows Communication Framework) サービスとしてロールにアクセスできます。ロール サービスを使用すると、WCF サービスを読み取りまたは使用できるアプリケーションからユーザーのロールを確認できます。たとえば、Windows フォーム アプリケーション、Web アプリケーション、または .NET Framework を使用しないアプリケーションからユーザーのロールを確認できます。ロール アプリケーション サービスの詳細については、「Windows Communication Foundation のロール サービスの概要」を参照してください。
ロール管理 API
ロール管理はページまたはフォルダへの権限を制限するだけではありません。ロール管理は、ユーザーがロールに属するかどうかをプログラムで決定するために使用できる API も提供します。これにより、ロールを利用するコードを記述して、ユーザーがだれであるかだけでなく、ユーザーが属するロールにも基づいてアプリケーション作業を実行できます。
アプリケーションでユーザー ID を作成した場合、ロールの作成、ロールへのユーザーの追加、およびどのユーザーがどのロールに属するかに関する情報の取得を実行するロール管理 API メソッドを使用できます。これらのメソッドによって、ロール管理用の独自のインターフェイスを作成できます。
アプリケーションが Windows 認証を使用している場合、ロール管理 API が提供するロール管理機能は少なくなります。たとえば、ロール管理を使用して新しいロールを作成することはできません。代わりに、Windows ユーザーとグループ管理を使用してユーザー アカウントとグループを作成し、ユーザーをグループに割り当てます。これで、ロール管理によって Windows ユーザーとグループの情報が読み込まれるため、認証に使用できます。
ASP.NET ロール サービスを使用している場合、ユーザーが特定のロールに属しているか、ユーザーのすべてのロールを取得するかを確認できます。ただし、ロール サービス API を使用してロールを管理することはできません。
ASP.NET ロール管理のしくみ
ロール管理を使用するには、まずこれを有効にし、オプションとしてロールを利用できるアクセス ルールを設定します。これで、実行時にロール管理機能を使用してロールを操作できます。
ロール管理の設定
ASP.NET ロール管理を使用するには、次のような設定を行ってアプリケーションの Web.config ファイル内で ASP.NET ロールを有効にします。
<roleManager
enabled="true"
cacheRolesInCookie="true" >
</roleManager>
ロールの一般的な用途には、ページまたはフォルダへのアクセスを許可または拒否するルールの設定があります。そのようなアクセス ルールは Web.config ファイルの authorization セクションで設定できます。次の例では、メンバのロールに属するユーザーは 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 ロールを作成する方法を次の例に示します。
Roles.CreateRole("members")
Roles.CreateRole("members");
JoeWorden というユーザーを manager ロールに追加する方法、および JillShrader と ShaiBassli というユーザーを members ロールに一度に追加する方法を次の例に示します。
Roles.AddUsersToRole("JoeWorden", "manager")
Dim userGroup(2) As String
userGroup(0) = "JillShrader"
userGroup(1) = "ShaiBassli"
Roles.AddUsersToRole(userGroup, "members")
Roles.AddUsersToRole("JoeWorden", "manager");
string[] userGroup = new string[2];
userGroup[0] = "JillShrader";
userGroup[1] = "ShaiBassli";
Roles.AddUsersToRole(userGroup, "members");
メモ : |
---|
ロール管理機能は、ASP.NET ロール サービスからは利用できません。ロール サービスは、特定のユーザーに関する情報のみを返します。 |
実行時のロールの使用
実行時にユーザーがサイトを参照する場合、ユーザーは Windows アカウント名として、またはアプリケーションにログインすることによって、ID を作成します。インターネット サイトでは、ユーザーがログインせずに (匿名で) サイトを参照した場合、ユーザーにはユーザー ID が与えられないため、ユーザーはどのロールにも属さないことになります。ログインしたユーザーの情報は、User プロパティからアプリケーションで使用できます。ロールが有効になると、ASP.NET は現在のユーザーのロールを検索し、これらを確認できるように User オブジェクトに追加します。現在のユーザーがメンバのロールに属するかどうかを判断する方法を次の例に示します。ユーザーがロールに属する場合、このコードはメンバのボタンを表示します。
If User.IsInRole("members") Then
buttonMembersArea.Visible = True
End If
if (User.IsInRole("members"))
{
buttonMembersArea.Visible = True;
}
ASP.NET では、RolePrincipal クラスのインスタンスも作成され、現在の要求コンテキストに追加されます。これにより、特定のロールに属するユーザーの判断など、ロール管理作業をプログラムによって実行できます。現在ログインしているユーザーのロールのリストを取得する方法を次の例に示します。
Dim userRoles() as String = CType(User, RolePrincipal).GetRoles()
string[] userRoles = ((RolePrincipal)User).GetRoles();
アプリケーションで LoginView コントロールを使用している場合、このコントロールはユーザーのロールを確認し、ユーザーのロールに基づいてユーザー インターフェイスを動的に作成できます。
ロール情報のキャッシュ
ユーザーのブラウザが Cookie を有効にしている場合、ASP.NET はオプションでユーザーのコンピュータの暗号化された Cookie にロール情報を格納できます。各ページの要求時に ASP.NET は Cookie を読み取り、そのユーザーのロール情報を Cookie から取得します。この方法では、ロール情報をデータベースから読み取る必要を最小限に抑えることができます。ユーザーのブラウザが Cookie をサポートしていない、または Cookie が無効になっている場合、ロール情報は各ページ要求が存続している間だけキャッシュされます。