Gewusst wie: Aktivieren von Rollen in RIA Services

In diesem Thema wird erläutert, wie Rollen in der WCF RIA Services-Projektmappe aktiviert werden, wenn Sie zuvor die Authentifizierung aktiviert haben. Sie können die Rollen eines Benutzers erst abrufen, nachdem der Benutzer authentifiziert wurde. Um die Projektmappe für die Authentifizierung zu konfigurieren, lesen Sie das Thema Gewusst wie: Aktivieren von Authentifizierung in RIA Services. Der Zugriff auf einen Domänenvorgang wird auf die Mitglieder einer Rolle beschränkt, indem das RequiresRoleAttribute-Attribut auf die Methode für den Domänenvorgang angewendet wird.

Rollen werden verwendet, um anzugeben, welche Gruppe authentifizierter Benutzer auf bestimmte Ressourcen zugreifen kann. Rollen in der RIA Services basieren auf Rollen in ASP.NET. Weitere Informationen zu Rollen finden Sie unter Grundlegendes zur Rollenverwaltung.

So konfigurieren Sie das Serverprojekt

  1. Öffnen Sie im Serverprojekt die Datei "Web.config".

  2. Aktivieren Sie im <system.web>-Abschnitt die Managerrolle, indem Sie das <roleManager>-Element hinzufügen.

    Das folgende Beispiel zeigt, wie die Managerrolle aktiviert wird.

    <system.web>
      <authentication mode="Forms"></authentication>
      <roleManager enabled="true"></roleManager>
    </system.web>
    
  3. Erstellen Sie in der Mitgliedschaftsdatenbank die erforderlichen Rollen, und weisen Sie den Rollen nach Bedarf Benutzer zu.

    Weitere Informationen finden Sie unter Grundlegendes zur Rollenverwaltung. Ein Beispiel für die Erstellung von Rollen finden Sie unter Exemplarische Vorgehensweise: Verwenden des Authentifizierungsdiensts mit der Silverlight-Geschäftsanwendung oder Exemplarische Vorgehensweise: Verwenden des Authentifizierungsdiensts mit der Silverlight-Navigationsanwendung.

  4. Um den Zugriff auf einen Domänenvorgang nur auf die Mitglieder einer angegebenen Rolle zu beschränken, wenden Sie das RequiresRoleAttribute-Attribut auf den Domänenvorgang an.

    Im folgenden Beispiel wird angegeben, dass nur Mitglieder der Rolle "Managers" auf den Domänenvorgang zugreifen können.

    <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;
    }
    

So greifen Sie auf Rollen im Clientprojekt zu

  1. Um zu überprüfen, ob der Benutzer zur erforderlichen Rolle gehört, greifen Sie auf die Roles-Eigenschaft zu, oder rufen Sie die IsInRole-Methode für das WebContext.Current.User-Objekt auf.

    Im folgenden Beispiel wird überprüft, ob der Benutzer zu einer Rolle mit dem Namen Managers gehört, bevor der Domänenvorgang aufgerufen wird.

    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. Wenn Sie das WebContext-Objekt in XAML verfügbar machen möchten, fügen Sie die aktuelle WebContext-Instanz vor dem Erstellen des visuellen Objekts im Stamm den Anwendungsressourcen im Application.Startup-Ereignis hinzu.

    Das folgende Beispiel zeigt, wie die WebContext-Instanz als Anwendungsressource hinzugefügt wird.

    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();
    }
    

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Verwenden des Authentifizierungsdiensts mit der Silverlight-Navigationsanwendung
Exemplarische Vorgehensweise: Verwenden des Authentifizierungsdiensts mit der Silverlight-Geschäftsanwendung