Compartir a través de


Habilitar roles en RIA Services

En este tema se muestra cómo habilitar roles en la solución de WCF RIA Services si se ha habilitado previamente la autenticación. Solo se pueden recuperar roles de un usuario después de que este se haya autenticado. Para configurar la solución para la autenticación, vea Habilitar autenticación en RIA Services. La restricción del acceso a una operación de dominio a los miembros de un rol se realiza aplicando el atributo RequiresRoleAttribute al método para la operación de dominio.

Los roles se utilizan para especificar qué grupo de usuarios autenticados puede tener acceso a ciertos recursos. Los roles de RIA Services se basan en los roles de ASP.NET. Para obtener más información sobre los roles, vea Descripción de la administración de roles.

Para configurar el proyecto de servidor

  1. En el proyecto de servidor, abra el archivo Web.config.

  2. En la sección <system.web>, habilite el rol de administrador agregando el elemento <roleManager>.

    En el ejemplo siguiente, se muestra cómo habilitar el rol de administrador.

    <system.web>
      <authentication mode="Forms"></authentication>
      <roleManager enabled="true"></roleManager>
    </system.web>
    
  3. En la base de datos de pertenencia, cree los roles requeridos y asigne usuarios a los roles según sea necesario.

    Para obtener más información, vea Descripción de la administración de roles. Para obtener un ejemplo de creación de roles, vea Tutorial: utilizar el servicio de autenticación con una aplicación de negocios de Silverlight o Tutorial: utilizar el servicio de autenticación con una aplicación de navegación de Silverlight.

  4. Para restringir el acceso a una operación de dominio a solo los miembros de un rol especificado, aplique el atributo RequiresRoleAttribute a la operación de dominio.

    En el ejemplo siguiente se especifica que solo los miembros del rol Managers pueden tener acceso a la operación de 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;
    }
    

Para tener acceso a los roles del proyecto de cliente

  1. Para comprobar si el usuario pertenece al rol requerido, obtenga acceso a la propiedad Roles o llame al método IsInRole en el objeto WebContext.Current.User.

    En el ejemplo siguiente se comprueba si el usuario pertenece a un rol denominado Managers antes de llamar a la operación de 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. Si desea que el objeto WebContext esté disponible en código XAML, agregue la instancia de WebContext actual a los recursos de aplicación en el evento Application.Startup antes de crear el objeto visual raíz.

    En el ejemplo siguiente se muestra cómo agregar la instancia de WebContext como un recurso de aplicación.

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

Vea también

Tareas

Tutorial: utilizar el servicio de autenticación con una aplicación de navegación de Silverlight
Tutorial: utilizar el servicio de autenticación con una aplicación de negocios de Silverlight