如何:启用 RIA Services 中的角色
本主题演示如何在之前已启用身份验证的情况下在 WCF RIA Services 解决方案中启用角色。只能在某个用户的身份得到验证后检索此用户的角色。若要配置解决方案进行身份验证,请参见如何:在 RIA Services 中启用身份验证。可以将 RequiresRoleAttribute 特性应用于一个域操作的方法,以限制只有某个角色的成员可以访问该域操作。
角色用于指定哪一组经身份验证的用户可访问特定资源。RIA Services 中的角色基于 ASP.NET 中的角色构建。有关角色的更多信息,请参见了解角色管理。
配置服务器项目
在服务器项目中,打开 Web.config 文件。
在
<system.web>
部分中,通过添加<roleManager>
元素来启用 Manager 角色。下面的示例演示如何启用 Manager 角色。
<system.web> <authentication mode="Forms"></authentication> <roleManager enabled="true"></roleManager> </system.web>
在成员资格数据库中,创建所需的角色,并根据需要将用户分配给角色。
有关更多信息,请参见了解角色管理。有关创建角色的示例,请参见演练:将身份验证服务用于 Silverlight 业务应用程序或演练:将身份验证服务用于 Silverlight 导航应用程序。
若要仅允许某个指定角色的成员访问域操作,请将 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; }
访问客户端项目中的角色
若要检查用户是否属于所需角色,请访问 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; } }
如果您希望使 WebContext 对象在 XAML 中可用,请在创建根 Visual 之前,将当前 WebContext 实例添加到 Application.Startup 事件中的应用程序资源。
下面的示例演示如何将 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 业务应用程序