次の方法で共有


方法: RIA Services でロールを有効にする

ここでは、以前に認証を有効にした場合に WCF RIA サービス ソリューションでロールを有効にする方法について説明します。ユーザーのロールは、ユーザーが認証されてからのみ取得できます。認証用にソリューションを構成する方法については、「方法: RIA Services で認証を有効にする」を参照してください。ドメイン操作へのアクセスをロールのメンバーに制限するには、RequiresRoleAttribute 属性をドメイン操作のメソッドに適用します。

ロールは、特定のリソースへのアクセスを許可する認証済みユーザー グループを指定するために使用されます。RIA サービス のロールは ASP.NET のロールに基づいて作成されます。ロールの詳細については、「ロール管理について」を参照してください。

サーバー プロジェクトを構成するには

  1. サーバー プロジェクトで Web.config ファイルを開きます。

  2. <system.web> セクションで、<roleManager> 要素を追加してマネージャー ロールを有効にします。

    マネージャー ロールを有効にする方法を次の例に示します。

    <system.web>
      <authentication mode="Forms"></authentication>
      <roleManager enabled="true"></roleManager>
    </system.web>
    
  3. メンバーシップ データベースで、必要なロールを作成し、必要に応じてそのロールにユーザーを割り当てます。

    詳細については、「ロール管理について」を参照してください。ロールの作成例については、「チュートリアル: Silverlight ビジネス アプリケーションでの認証サービスの使用」または「チュートリアル: Silverlight ナビゲーション アプリケーションでの認証サービスの使用」を参照してください。

  4. ドメイン操作へのアクセスを、指定されたロールのメンバーのみに制限するには、ドメイン操作に 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;
    }
    

クライアント プロジェクトのロールにアクセスするには

  1. 必要なロールにユーザーが属しているかどうかを確認するには、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;
        }
    }
    
  2. 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 ビジネス アプリケーションでの認証サービスの使用