如何:使用客户端应用程序服务访问用户角色
更新:2007 年 11 月
可以使用客户端应用程序服务从现有的 ASP.NET AJAX 角色服务中检索角色信息。有关如何设置角色服务的信息,请参见通过 ASP.NET AJAX 使用角色信息。
以下过程演示如何在配置为使用角色服务的 Windows 窗体应用程序中访问已经过身份验证的用户的用户角色信息。有关更多信息,请参见如何:配置客户端应用程序服务。此过程要求访问正在运行的 ASP.NET AJAX 角色服务。有关在客户端应用程序服务功能的端到端测试的指南,请参见演练:使用客户端应用程序服务。
确定用户是否属于某个特定的角色
调用从 static Thread.CurrentPrincipal 属性中检索的 IPrincipal 引用的 IsInRole 方法。此方法返回 Boolean 值,您可以使用该值提供对特殊功能的访问,如下面的示例所示。如果用户未通过身份验证或者不属于指定的角色,则此方法返回 false。
IsInRole 方法通过 ClientRoleProvider 类在内部访问远程角色服务。虽然可以直接访问 ClientRoleProvider 类,但通常会间接访问,如下面的代码所示。有关更多信息,请参见客户端应用程序服务概述。
下面的示例代码假定应用程序包含一个名为 managerOnlyButton 的 Button。
If System.Threading.Thread.CurrentPrincipal.IsInRole("manager") Then managerOnlyButton.Visible = True End If
if (System.Threading.Thread.CurrentPrincipal.IsInRole("manager")) { managerOnlyButton.Visible = true; }
可靠编程
本主题中的示例代码演示 Windows 客户端应用程序中的角色服务的最简单用法。当通过客户端应用程序服务访问用户角色时,如果服务不可用,则代码会引发 WebException。有关在此情况下如何处理 WebException 的示例,请参见演练:使用客户端应用程序服务。
此外,如果用户登录已过期,则 IsInRole 方法将总是返回 false。如果应用程序在身份验证之后不久调用过一次 IsInRole 方法,将不会发生这种情况。如果应用程序必须在其他时间检索用户角色,则您可能需要添加代码来重新验证登录已过期的用户。如果所有有效用户均指定了角色,则可以通过调用 ClientRoleProvider.GetRolesForUser 方法来确定登录是否已过期。如果未返回任何角色,则说明登录已过期。有关此功能的示例,请参见 GetRolesForUser 方法。只有在应用程序配置中选定“每次服务器 Cookie 到期时要求用户重新登录”之后,此功能才是必需的。有关更多信息,请参见如何:配置客户端应用程序服务。