您的位置:首页 > 其它

【MVC5】使用权限+角色

2015-10-27 11:24 274 查看

1.在Ticket中设置用户角色

在权限的Ticket中设置用户的角色(这里是逗号分割)。

List<string> roles = new List<string>();

if (isAdmin) {
roles.Add("Admin");
}
roles.Add("Guest");

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
model.UserId,
DateTime.Now,
DateTime.Now.AddDays(30),    // 设置记住登录的时间(这里是30天)
true,
String.Join(",", roles));    // 设置用户角色
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
// 设置cookie的过期时间(这里是50年)
cookie.Expires = DateTime.Now.AddYears(50);
Response.Cookies.Add(cookie);

2.在Global.asax.cs中添加Application_AuthenticateRequest方法

protected void Application_AuthenticateRequest(object sender, EventArgs e) {
// 取得认证Check的Cookie
HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];

if (cookie == null) return;

// 解密
FormsAuthenticationTicket ticket = null;
try {
ticket = FormsAuthentication.Decrypt(cookie.Value);
}
catch (Exception) {
return;
}
if (ticket == null) return;

// 取得ticket.UserData中设定的角色
string[] roles = ticket.UserData.Split(new char[] { ',' });

// From认证中,使用IPrincipal对象中的GenericPrincipal类。
// 该类由表示资格情报的FormsIdentity类和角色信息(string[]对象)组成。
FormsIdentity identity = new FormsIdentity(ticket);
GenericPrincipal principal = new GenericPrincipal(identity, roles);

// 把FormsIdentity赋值到Context.User中
// 可以从Page.User中取得该值
Context.User = principal;
}

3.在Controller中使用Authorize特性

// 允许匿名访问
[AllowAnonymous]
public class HomeController : Controller
{
......
}

// 只允许登录用户访问
[Authorize]
public class SampleController : Controller
{
......
}

// 只允许具有"Admin"角色的用户访问
[Authorize(Roles = "Admin")]
public class SampleController : Controller
{
......
}

// 该特性同样可用于Action

参照:http://www.atmarkit.co.jp/ait/articles/0307/26/news002_2.html

已同步到【MVC5】ASP.NET MVC 项目笔记汇总
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: