Share via


Procedura: abilitare i ruoli in Servizi RIA

In questo argomento viene illustrato come abilitare i ruoli nella soluzione WCF RIA Services se è stata precedentemente abilitata l'autenticazione. È possibile recuperare il ruolo di un utente solo dopo che l'utente è stato autenticato. Per configurare la soluzione per l'autenticazione, vedere Procedura: abilitare l'autenticazione in Servizi RIA. Per limitare l'accesso a un'operazione di dominio ai membri di un ruolo, si applica l'attributo RequiresRoleAttribute al metodo per l'operazione di dominio.

I ruoli vengono utilizzati per specificare a quale gruppo di utenti autenticati è consentito accedere a determinate risorse. I ruoli in RIA Services si basano sui ruoli di ASP.NET. Per ulteriori informazioni sui ruoli, vedere Informazioni sulla gestione dei ruoli.

Per configurare il progetto server

  1. Aprire il file Web.config nel progetto server.

  2. Nella sezione <system.web>, abilitare il ruolo di gestione aggiungendo l'elemento <roleManager>.

    Nell'esempio seguente viene illustrato come abilitare il ruolo di gestione.

    <system.web>
      <authentication mode="Forms"></authentication>
      <roleManager enabled="true"></roleManager>
    </system.web>
    
  3. Nel database di appartenenza, creare i ruoli necessari e assegnare utenti a tali ruoli secondo le esigenze.

    Per ulteriori informazioni, vedere Informazioni sulla gestione dei ruoli. Per un esempio di creazione di ruoli, vedere Procedura dettagliata: utilizzo del servizio di autenticazione con l'applicazione aziendale di Silverlight o Procedura dettagliata: utilizzo del servizio di autenticazione con Applicazione di navigazione Silverlight.

  4. Per limitare l'accesso a un'operazione di dominio solo agli utenti membri di un ruolo specifico, applicare l'attributo RequiresRoleAttribute all'operazione di dominio.

    Nell'esempio seguente viene mostrato come solo gli utenti membri del ruolo di gestione possono accedere all'operazione di dominio.

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

Per accedere ai ruoli nel progetto client

  1. Per controllare se l'utente appartiene al ruolo desiderato, accedere alla proprietà Roles o chiamare il metodo IsInRole sull'oggetto WebContext.Current.User.

    Nell'esempio seguente viene verificato se l'utente appartiene a un ruolo denominato Managers prima di chiamare l'operazione di dominio.

    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. Se si desidera rendere disponibile l'oggetto WebContext in XAML, aggiungere l'istanza WebContext corrente alle risorse dell'applicazione nell'evento Application.Startup prima di creare l'oggetto visivo radice.

    Nell'esempio seguente viene mostrato come aggiungere l'istanza WebContext come risorsa dell'applicazione.

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

Vedere anche

Attività

Procedura dettagliata: utilizzo del servizio di autenticazione con Applicazione di navigazione Silverlight
Procedura dettagliata: utilizzo del servizio di autenticazione con l'applicazione aziendale di Silverlight