方法: RIA Services でロールを有効にする
ここでは、以前に認証を有効にした場合に WCF RIA サービス ソリューションでロールを有効にする方法について説明します。ユーザーのロールは、ユーザーが認証されてからのみ取得できます。認証用にソリューションを構成する方法については、「方法: RIA Services で認証を有効にする」を参照してください。ドメイン操作へのアクセスをロールのメンバーに制限するには、RequiresRoleAttribute 属性をドメイン操作のメソッドに適用します。
ロールは、特定のリソースへのアクセスを許可する認証済みユーザー グループを指定するために使用されます。RIA サービス のロールは ASP.NET のロールに基づいて作成されます。ロールの詳細については、「ロール管理について」を参照してください。
サーバー プロジェクトを構成するには
サーバー プロジェクトで Web.config ファイルを開きます。
<system.web>
セクションで、<roleManager>
要素を追加してマネージャー ロールを有効にします。マネージャー ロールを有効にする方法を次の例に示します。
<system.web> <authentication mode="Forms"></authentication> <roleManager enabled="true"></roleManager> </system.web>
メンバーシップ データベースで、必要なロールを作成し、必要に応じてそのロールにユーザーを割り当てます。
詳細については、「ロール管理について」を参照してください。ロールの作成例については、「チュートリアル: Silverlight ビジネス アプリケーションでの認証サービスの使用」または「チュートリアル: Silverlight ナビゲーション アプリケーションでの認証サービスの使用」を参照してください。
ドメイン操作へのアクセスを、指定されたロールのメンバーのみに制限するには、ドメイン操作に RequiresRoleAttribute 属性を適用します。
次の例では、Managers ロールのメンバーだけがドメイン操作にアクセスできるように指定しています。
<RequiresRole("Managers")> _ Public Function GetCustomers() As IQueryable(Of Customer) Return Me.ObjectContext.Customers End Function
[RequiresRole("Managers")] public IQueryable<Customer> GetCustomers() { return this.ObjectContext.Customers; }
クライアント プロジェクトのロールにアクセスするには
必要なロールにユーザーが属しているかどうかを確認するには、Roles プロパティにアクセスするか、
WebContext.Current.User
オブジェクトの IsInRole メソッドを呼び出します。次の例では、ユーザーが
Managers
というロールに属しているかどうかを確認してから、ドメイン操作を呼び出します。Private Sub LoadRestrictedReports() Dim loadSales = context.Load(context.GetSalesOrderHeadersQuery().Take(numberOfRows)) SalesOrdersGrid.ItemsSource = loadSales.Entities SalesOrdersGrid.Visibility = System.Windows.Visibility.Visible If (WebContext.Current.User.IsInRole("Managers")) Then Dim loadCustomers = context.Load(context.GetCustomersQuery().Take(numberOfRows)) CustomersGrid.ItemsSource = loadCustomers.Entities CustomersGrid.Visibility = System.Windows.Visibility.Visible Else CustomersGrid.Visibility = System.Windows.Visibility.Collapsed End If End Sub
private void LoadRestrictedReports() { LoadOperation<SalesOrderHeader> loadSales = context.Load(context.GetSalesOrderHeadersQuery().Take(numberOfRows)); SalesOrdersGrid.ItemsSource = loadSales.Entities; SalesOrdersGrid.Visibility = System.Windows.Visibility.Visible; if (WebContext.Current.User.IsInRole("Managers")) { LoadOperation<Customer> loadCustomers = context.Load(context.GetCustomersQuery().Take(numberOfRows)); CustomersGrid.ItemsSource = loadCustomers.Entities; CustomersGrid.Visibility = System.Windows.Visibility.Visible; } else { CustomersGrid.Visibility = System.Windows.Visibility.Collapsed; } }
XAML で WebContext オブジェクトを使用できるようにする場合は、ルート visual を作成する前に、Application.Startup イベントのアプリケーション リソースに現在の WebContext インスタンスを追加します。
次の例は、アプリケーション リソースとして WebContext インスタンスを追加する方法を示しています。
Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) Handles Me.Startup Me.Resources.Add("WebContext", WebContext.Current) Me.RootVisual = New MainPage() End Sub
private void Application_Startup(object sender, StartupEventArgs e) { this.Resources.Add("WebContext", WebContext.Current); this.RootVisual = new MainPage(); }
参照
処理手順
チュートリアル: Silverlight ナビゲーション アプリケーションでの認証サービスの使用
チュートリアル: Silverlight ビジネス アプリケーションでの認証サービスの使用