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 项目笔记汇总

【MVC5】使用权限+角色的更多相关文章

  1. Oracle命令:授权-收回权限-角色

    Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...

  2. 转 oracle 学习- 用户权限角色

    创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...

  3. Spring整合Shiro 权限 角色 用户关系分析

    Spring整合Shiro 权限 角色 用户关系分析 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 前置内容 之前我们学习了,使用注解的方式去完成权限的控制,当然,也是静态的,也就 ...

  4. SAP Basis DEBUG改表数据权限角色设计

    SAP Basis DEBUG改表数据权限角色设计 项目实践中,因种种原因不得不要通过debug才能解决一些特定的问题,所以就涉及到了debug权限角色的定义了. DEBUG的权限,无非就是: 1)数 ...

  5. oracle数据字典-权限-角色

    每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...

  6. oracle10 权限角色

    管理权限和角色 介绍 这一部分我们主要看看oracle中如何管理权限和角色,权限和角色的区别在那里.   当刚刚建立用户时,用户没有任何权限,也不能执行任何操作,oracle数据库会自动创建一个方案, ...

  7. [每日一题] OCP1z0-047 :2013-07-25 权限――角色与对象权限

    有疑问可以去itpub讨论:http://www.itpub.net/thread-1804842-1-1.html 按题意,操作如下: 1.创建一个角色r1 sys@OCM> create r ...

  8. oracle数据字典-权限-角色-参数

    每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...

  9. sql 2008 权限角色控制

    Use Test --创建角色 create role rtt create user username for login username --将用户TestUser添加到TestRole角色中 ...

随机推荐

  1. 线程间操作无效: 从不是创建控件“textBox2”的线程访问它

    如何:对 Windows 窗体控件进行线程安全调用 线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调 ...

  2. bzoj 2073: [POI2004]PRZ

    2073: [POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的 ...

  3. 【bugku】【ZSCTF】【迷宫RE】Take The Maze WriteUp

    Take The Maze 首先拿进PEID里查一下有没有壳: 无壳,果断拖进IDA.可是Graph View中找不到主程序的位置,在函数表里寻找主函数: 函数太多阻扰了我们找到主程序,运行一下程序找 ...

  4. jni 写一个简单的photoshop

    第一步创建 ui <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  5. C#反射读取和设置类的属性

    C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建 ...

  6. 多线程--Task,等待用户输入AutoResetEvent

    上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5. 4.0也行,但不成熟.Thread引用2.0就够了. 1.通过构造函数创 ...

  7. vs2017 新建Class 文件时,自动添加作者版权声明注释

    1.用文本打开,在其头部加上 “C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTempl ...

  8. JavaScript基础入门教程(六)

    说明 在看这篇博文之前还是希望读者阅读本系列前几篇文章,还有就是该系列需要读者拥有其它语言的编程基础,一些基本的知识点,比如什么是形参和实参将不再赘述.这篇博文主要讲函数. 函数的定义 在js种支持函 ...

  9. google的开源项目总结

    转自http://www.feng5166.com/blog/424.html google的开源项目值得我们一用的,这些项目很有意义,甚至可以直接用在我们自己的工作上!学习编程的的一个比较好的方式就 ...

  10. 17、percona-toolkit

    pt-ioprofile工具:1.percona-toolkit(在http://www.percona.com下载)2.安装该工具依赖的perl组件yum install perl-IO-Socke ...