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
En el proyecto de servidor, abra el archivo Web.config.
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>
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.
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
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; } }
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