在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《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")]的资源了

最新文章

  1. DateHelper.cs日期时间操作辅助类C#
  2. NYOJ 70
  3. 设计模式--工厂模式Factory(创建型)
  4. jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示
  5. jmx server 和jmx client
  6. Winform开发框架中实现信息阅读状态的显示和存储
  7. ArcGIS Server 10.1 错误 service failed to start,
  8. Unity3D学习笔记
  9. python yield
  10. Tile-Based Deferred Rendering
  11. Oracle 相关概念详解
  12. Annotations:注解
  13. elk 索引
  14. 在github上搭建免费的博客
  15. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
  16. J2EE进阶(七)利用SSH框架根据数据表建立model类
  17. 中标麒麟(linux)下Qt调用python数据转换
  18. 2018.12.21 浪在ACM 集训队第十次测试赛
  19. centos7 设置时区和时间
  20. SimpleDateFormat是线程不安全的,切忌切忌!

热门文章

  1. ios开发 学习积累20161024~20161026
  2. 中南月赛 B题 Scoop water
  3. 解决:IDEA springmvc maven 项目搭建完后没有生成 webcontent 目录
  4. [POI2007]EGZ-Driving Exam
  5. python单下划线、双下划线、头尾双下划线说明:
  6. LDAP常用命令解析
  7. PHP匿名函数(闭包)
  8. Python爬虫教程-06-爬虫实现百度翻译(requests)
  9. centos安装flash
  10. apache 配置PHP的支持重写伪静态