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中微软为 ...
随机推荐
- Azure .NET Libraries 入门
本指南演示了以下 Azure .NET API 的用法,包括设置认证.创建并使用 Azure 存储.创建并使用 Azure SQL 数据库.部署虚拟机.从 GitHub 部署 Azure Web 应用 ...
- windows 下运行 tomcat
本节是以 tomcat 7.0 为例,描述在 windows 系统上从下载到运行 tomcat 的步骤 https://tomcat.apache.org/download-70.cgi 下载后解压缩 ...
- HDOJ2037 今年暑假不AC (经典的贪心问题)
Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会 ...
- C#学习笔记-代理模式
题目:A追B,但是羞于表示,所以A通过C给B一直送礼物以讨得欢心. 分析: 根据就分为三个类,SchoolGirl一个类,这个类只需要获得名字就好了:Pursuit一个类,这个类需要实现送礼物这个方法 ...
- 汇编语言程序环境搭建masm+debug64位 win10/7
介绍:MASM是Microsoft Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译 ...
- 远景GIS云产品规划
远景GIS云平台在初期有过产品设计,随着研发工作的进行以及对GIS云的认知更进行一步,最近重新梳理了平台的产品规划,使以后的开发不至于走偏方向. GIS云平台的研发也是摸着石头过河,免不了有考虑不到的 ...
- Ddos 反射性防护 simple
加固NTP服务: 1.通过Iptables配置只允许信任的IP,访问本机的UDP的123端口,修改配置文件执行echo "disable monitor" >> /et ...
- web前端与后端的理解区分
要了解web前后端的区别,首先必须得清楚什么是web前端和web后端. 首先:web的本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本 ...
- 关于asp.net MVC3 ----@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用:@Html.Partial 对应 @{Html.RenderPartia ...
- [翻译] LTInfiniteScrollView
LTInfiniteScrollView 效果: Usage - 使用 Create the scroll view by: 通过以下方式来创建出scroll view self.scrollView ...