现在几乎所有的网站都有一套自己的权限管理来区分:游客,注册用户,管理员帐户
使用WebConfig对文件夹进行区分管理是很方便的
首先在需要进行区分的文件夹内添加WebConfig如下:
<?
xml
version
=
"1.0"encoding="utf-8" ?>
<
configuration
>
<
system.web
>
<
customErrors
mode
=
"Off"/>
<!--
security
-->
<
authorization
>
<
allow
roles
=
"administrator" />
<!--
允许所有用户
-->
<
deny
users
=
"*"></deny>
<!--
<allow users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
<deny users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
-->
</
authorization
>
<
httpRuntime
useFullyQualifiedRedirectUrl
=
"true"maxRequestLength="1024000"executionTimeout="43200" />
</
system.web
>
</
configuration
>
这样这个文件夹就只能由属于
administrator
用户组的用户才能登录了.
当然在用户登陆成功后要给他发一个Cookice代码如下:
FormsAuthentication
.Initialize();
// 为了实现认证,创建一个新的票据
FormsAuthenticationTicket
ticket = new FormsAuthenticationTicket(
1, // 票据版本号
this.Username.Text, // 票据持有者
DateTime.Now, //分配票据的时间
DateTime.Now.AddMinutes(30), // 失效时间
true, // 需要用户的 cookie
login, // 用户数据,这里其实就是用户的角色
FormsAuthentication.FormsCookiePath);//cookie有效路径
//使用机器码machine key加密cookie,为了安全传送
string
hash = FormsAuthentication.Encrypt(ticket);
HttpCookie
cookie = new HttpCookie(
FormsAuthentication
.FormsCookieName, // 认证cookie的名称
hash); //加密之后的cookie
if
(ticket.IsPersistent) cookie.Expires = ticket.Expiration;
//添加cookie到页面请求响应中
Response.Cookies.Add(cookie);
然后在Global.asax.cs中添加
Application_AuthenticateRequest
,用于获取用户权限
protected
void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =
(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
// 取存储在票据中的用户数据,在这里其实就是用户的角色
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
通过以上方法就可以轻松完成网站的权限管理了