我们知道,ASP.NET的Web应用程序允许4种身份验证方式,分别是:Windows,Forms,Passport,None
如果我们采用的是默认的Windows验证方式,那么可以在最小的代价下实现安全的身份验证机制。事实上,我们不要为此编写任何代码,也不需要额外为用户保存凭据。与此同时,用户(一般情况下)也无需在使用应用程序的时候输入用户名和密码。
那么,如何在基于Windows验证的Web应用程序中检索当前用户的所有角色呢?下面是一个范例
这是页面代码
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Write("当前用户名为:" + User.Identity.Name+"<br />");
foreach (string role in Roles.GetRolesForUser())
{
Response.Write("当前用户属于该角色:" + role+"<br />");
}
}
}
}
}
我们还需要设置web.config,让它可以知道使用什么样的角色管理提供程序查找角色。
<roleManager defaultProvider="WindowsProvider"
enabled="true"
cacheRolesInCookie="false">
<providers>
<add
name="WindowsProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
有关这个提供程序的详细信息,有兴趣的朋友可以参考下面的链接
http://msdn.microsoft.com/zh-tw/library/system.web.security.windowstokenroleprovider(VS.80).aspx
值得一提的是,这个Provider所返回的角色列表中包含了域组(全局组)和本地组
很显然,使用这个提供程序,是无法对用户所属的组进行操作的,例如常见的添加组,编辑组,删除组等等,这些都是必须通过windows本身来完成。
与角色管理相关的几个操作还有
1. 确认某个用户是否在某个角色中
Response.Write(Roles.IsUserInRole("BuiltIn\\Administrators"));//这个写法还可以给定用户名进行判断
或者
Response.Write(User.IsInRole("BuiltIn\\Administrators"));//这个写法只能判断当前用户
2. 得到某个角色的所有用户 –这也是做不到的
另外,如果想要得到Windows用户身份的更多信息,可以通过下面的方式