Owin+ASP.NET Identity浅析系列(四)实现用户角色
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《Owin+ASP.NET Identity浅析系列》来祭奠那逝去的……
通过Owin+ASP.NET Identity浅析系列(三)框架结构分析一文,我们大概了解了IdentityModels、IdentityConfig和Startup三个文件是做什么的
使用VS2015新建MVC项目之后,我们翻阅这三个文件会发现,微软并没有帮我们生成角色的相关代码,但是项目中只要牵涉到会员,就很少不牵涉角色的,蛋疼啊!!!好吧,还好Identity很强大,我们只需要写一些类似ApplicationUser的代码就可以实现会员角色功能了,开始折腾!!!
因为微软和Identity的强大,我们只需要仿写ApplicationUser的代码即可!
第一步:做下数据库准备吧,微软很蛋疼,如果你使用它的角色管理器新建角色,角色表必须包含一个字段Discriminator,这个字段的意思是区分IdentityRole和你自己的Role,因此我们不得不在表里添加一个这样的字段(谁让微软已经造好了轮子,咱就用吧)
create table aspnetroles
(
Id char(32) primary key,
Name varchar(50) not null comment '角色名称',
Discriminator varchar(50) null comment '区分IdentityRole和自定义Role',
Description varchar(100) null comment '描述',
CreateTime datetime not null comment '创建时间'
) comment '用户角色表';
备注:描述和创建时间字段,是我扩展的字段,仿照扩展用户属性
第二步:在IdentityModels类文件中新建ApplicationRole实体类(是不是跟ApplicationUser很类似)
// 可以通过向 ApplicationRole 类添加更多属性来为角色添加配置文件数据
public class ApplicationRole : IdentityRole
{
/// <summary>
/// 角色描述
/// </summary>
public string Description { get; set; } /// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; } public ApplicationRole()
{
this.Id = System.Guid.NewGuid().ToString("N");
}
}
第三步:在IdentityConfig类文件中新建ApplicationRoleManager角色管理器
// 配置此应用程序中使用的应用程序角色管理器。RoleManager 在 ASP.NET Identity 中定义,并由此应用程序使用。
public class ApplicationRoleManager : RoleManager<ApplicationRole>
{
public ApplicationRoleManager(IRoleStore<ApplicationRole, string> store) : base(store) { } public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>()));
}
}
第四步:在Startup.Auth类文件中,配置角色管理器
// 配置数据库上下文、用户管理器、角色管理器和登录管理器,以便为每个请求使用单个实例
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
第五步:OK到此,我们就可以像获取用户管理器一样,获取角色管理器了
protected IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } protected ApplicationUserManager UserManager { get { return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } } protected ApplicationRoleManager RoleManager { get { return HttpContext.GetOwinContext().GetUserManager<ApplicationRoleManager>(); } }
备注:拿到角色管理器后,你可以通过RoleManager.AddToRole(userId, roleName)方法将用户加入角色,这样这个用户就可以访问被标注[Authorize(Roles = "roleName")]的资源了
Owin+ASP.NET Identity浅析系列(四)实现用户角色的更多相关文章
- Owin+ASP.NET Identity浅析系列(一)用户登录注册
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...
- Owin+ASP.NET Identity浅析系列(五)接入第三方登录
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… OK,用户角色实现后,我们回 ...
- Owin+ASP.NET Identity浅析系列(三)框架结构分析
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...
- Owin+ASP.NET Identity浅析系列(二)扩展用户属性
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 上一篇博客讲了用户登录注册问 ...
- ASP.NET Identity入门系列教程(一) 初识Identity
摘要 通过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优势. 目录 身份验证(Authentic ...
- Asp.Net生命周期系列四
上回我们说的当一个Http请求来到HttpModule这里的时候,Asp.Net内部并未对这个Http请求做出任何的处理,我们可以对这个Http请求添加一些我们需要的信息,以方便我们控制这个Http请 ...
- asp.net2.0安全性(1)--用户角色篇(类)--转载来自车老师
Membership.MembershipUser和Roles类 用户与角色管理在asp.net2.0中是通过Membership和Roles两个类来实现的. Membership:用户成员账号管理, ...
- asp.net2.0安全性(1)--用户角色篇(代码实现1)--转载来自车老师
创建用户: MembershipCreateStatus mc; Membership.CreateUser(txtUid.Text, txtPwd.Text, txtEmail.Text, txtQ ...
- asp.net2.0安全性(1)--用户角色篇(起篇)--转载来自车老师
安全管理的解决方案在.net1.1中几乎为一片空白,对于应用程序的验证与授权大部分的工作是开发人员自己编写代码,或者是借助企业库等工具来实现,此可谓.net1.1中的一大缺憾.在.net2.0中微软为 ...
随机推荐
- Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类
Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何 ...
- jquery appendTo用法
$("#top_cartWarp").appendTo($("#top_main_right")).css('position','relative').css ...
- 中南月赛 B题 Scoop water
Problem B: Scoop water Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 261 Solved: 57[Submit][Status ...
- 【PyQt5 学习记录】003:水平布局和获取屏幕尺寸
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PySide2.QtWidgets import (QApplication, QW ...
- redux、immutablejs和mobx性能对比(三)
四.我的结论 通过第三部分的数据数据分析,我觉得我们可以得到以下结论: 无论是在开发环境还是测试环下页面的首次加载速度结果都是:redux>immutablejs>mobx,但是他们之间的 ...
- Cloudera Manager5安装总结遇到问题及解决办法 CDH 5.8 on CentOS 7
问题导读:1.Cloudera Manager在线安装你认为有什么优点和缺点?2.Cloudera Manager安装过程中遇到,你认为该如何解决?3.在线安装addr.arpa domain nam ...
- The String class's judging function
字符串的判断功能: package com.itheima_03; /* * Object:是类层次结构中的根类,所有的类都直接或者间接的继承自该类. * 如果一个方法的形式参数是Object,那么这 ...
- 131.007 Unsupervised Learning - Feature Selection | 非监督学习 - 特征选择
1 Why? Reason1 Knowledge Discovery (about human beings limitaitons) Reason2 Cause of Dimensionality ...
- OFDM正交频分复用---基础入门图示
@(162 - 信号处理) 整理转载自:给小白图示讲解OFDM 下面以图示为主讲解OFDM,以"易懂"为第一要义. 注:下面的讨论如果不做说明,均假设为理想信道. *** 一张原理 ...
- ubuntu16 下安装redis 以及设置其为开机启动
1.下载redis安装包 sudo wget http://download.redis.io/releases/redis-3.2.6.tar.gz 2.解压 tar -zxvf redis-3. ...