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. HDU 3485【101】 51nod 1668【010】 joj 2171【111】动态规划

    有一个只含0和1的长度为n的串,问不含有101的所有串的个数. ——不存在连续的101.010.111的字符串数量 HDU:https://cn.vjudge.net/problem/HDU-3485 ...

  2. Flask实战第66天:celery实现异步任务

    Celery文档:http://docs.celeryproject.org Celery 通过消息进行通信,用专用的工作线程不断监视任务队列以执行新工作. Celery需要消息传输来发送和接收消息. ...

  3. ABP+NetCore+Vue.js实现增删改查

    ABP我就不多介绍了,不知道的可以自己百度 本篇开发工具VS2017,数据库SQL SERVER2012,系统Win7 1.去ABP官网下载对应的模板,下载地址:https://aspnetboile ...

  4. 关于SOA

    什么是SOA SOA:面向服务的体系结构(Service-Oriented Architecture,SOA,也叫面向服务架构), SOA是指为了解决在Internet环境下业务集成的需要,通过连接能 ...

  5. 【欧拉回路】Gym - 101411C - Courier's Route

    每个城市有4个城门,每个城门会发出唯一一条边去别的城市的城门.问你能否从城市1出发,经过每个城门恰好一次,再回到城市1. 每个城市的度数都是4,必然存在欧拉回路(如果连通).欧拉回路显然是一个合法解. ...

  6. 【模拟+递归+位运算】POJ1753-Flip Game

    由于数据规模不大,利用爆搜即可.第一次用位运算写的,但是转念一想应该用递归更加快,因为位运算没有剪枝啊(qДq ) [思路] 位运算:时间效率较低(172MS),有些辜负了位运算的初衷.首先将二维数组 ...

  7. Java学习笔记(7)

    构造函数: 构造函数的作用:给对应的对象进行初始化. 构造函数定义的格式: 修饰符   函数名(形式参数){ 函数体... } 构造函数要注意的细节: 构造函数是没有返回值类型的 构造函数的函数名必须 ...

  8. Problem H: 零起点学算法87——打印所有低于平均分的分数

    #include<stdio.h> int main(){ ],b[]; while(scanf("%d",&n)!=EOF){ ; ;i<n;i++){ ...

  9. [转]servlet配置中init-param

    需要初始化的参数比如你的servlet里面有个属性为int total=0默认是0,你想让他初始时50则用init-param 给他赋值 init-param面对应的参数名和值,是给servlet在初 ...

  10. uva10392 Factoring Large Numbers

    uva10392 Factoring Large Numbers 本文涉及的知识点是,使用线性筛选法得到素数表. Table of Contents 1 题目 2 思路 3 参考 1 题目 ===== ...