asp.net Identity2 角色(Role)的使用(一)初始配置
asp.net Identity自带有角色功能,但默认的模板并没有启用。启用Role的步骤如下:定义role模型--配置角色管理器---配置初始化器---修改数据库上下对象---在应用程序启动文件中配置角色请求
1、定义模型: 在IdentityModel.cs
//定义程序的角色模型,继承自IdentityRole
public class ApplicationRole : IdentityRole
{
public ApplicationRole():base() {}
public ApplicationRole(string roleName) :base(roleName){}
[Display(Name="角色描述")]
[StringLength(50,ErrorMessage="{0}不能超过50个字符")]
public string Description { get; set; }
}
2、配置应用程序角色管理器 IdentityConfig.cs
// 配置此应用程序中使用的应用程序角色管理器。RoleManager 在 ASP.NET Identity 中定义,并由此应用程序使用。
public class ApplicationRoleManager : RoleManager<ApplicationRole>
{
public ApplicationRoleManager(IRoleStore<ApplicationRole, string> roleStore)
: base(roleStore)
{ }
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>()));
}
}
3、//配置应用程序初始化器 ,设置数据库初始化器,它就在应用程序运行的时候加载。
//在初始化器中需要建立一个管理员角色和一个具有管理员角色的账户。 IdentityConfig.cs
public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> //如果模型改变就删除原有数据库,重新创建一个数据库,同时,已有的数据将会丢失。
{
protected override void Seed(ApplicationDbContext context) //建立种子方法,当模型改变需要重新建一个数据库的时候,用默认的数据填充数据库。
{
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); //取得userManager ,或者使用new ApplicationUserManager(new UserStore<ApplicationUser>(context));
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
//创建角色列表
var roles =new List<ApplicationRole>
{
new ApplicationRole { Name="SuperAdmin",Description="系统超级管理员--负责用户角色管理,资源上传等所有权限"},
new ApplicationRole { Name="Teacher",Description="专业教师--可以上传资源和发布消息。栏目设置"},
new ApplicationRole { Name="Student",Description ="学生--可以查看上传资源的内容,但不能进行后台设置。"},
new ApplicationRole { Name ="Expert",Description ="专家--可以查看上传资源的内容,但不能进行后台设置"}
};
foreach(var role in roles) //遍历列表,如果数据库中不存在列表中某个角色,就添加角色
{
var _role =roleManager.FindByName(role.Name);
if(_role == null)
{
var roleResult =roleManager.Create(role); //创建角色。
}
}
// roles.ForEach(s => context.Roles.Add(s));
// context.SaveChanges();
//创建用户列表
var users =new List<ApplicationUser>
{
new ApplicationUser { Email="jwc@ybzy.cn",UserName="administrator",RealName="教务处",Gender= Gender.男,Birthday=DateTime.Parse("2002-7-1")},
new ApplicationUser { Email="yuanhaoliu@vip.qq.com",UserName="liuyuanhao",RealName="刘元浩",Gender= Gender.男,Birthday=DateTime.Parse("1982-5-21")},
};
//创建用户并设置不锁定用户
// users.ForEach(s => userManager.Create(s,"Ybzy"+s.Email));
// users.ForEach(s =>userManager.SetLockoutEnabled(s.Id,false));
foreach(var user in users) //遍历用户列表,如果数据库中不存在列表中的某个用户,就添加这个用户。
{
var _user =userManager.FindByName(user.UserName);
if(_user == null)
{
var userResult =userManager.Create(user,"Ybzy"+user.Email); //创建用户和密码,
var userLockResult =userManager.SetLockoutEnabled(user.Id,false); //不锁定此用户。
}
}
//给用户添加角色
/* foreach(var user in users)
{
userManager.AddToRoles(userManager.FindByName(user.UserName).Id,roles.Select(c =>c.Name).ToArray()));
}
*/
foreach(var user in users)
{
var _user =userManager.FindByName(user.UserName); //通过用户名在数据库中找到这个用户。
var rolesForUser =userManager.GetRoles(_user.Id); //通过用户ID 找到此用户所拥有的角色。
foreach (var role in roles)
{
if(!rolesForUser.Contains(role.Name)) //如果用户没有拥有此角色。通过用户名。
{
var result =userManager.AddToRoles(user.Id,role.Name); //将该用户加入此角色。
}
}
}
//以下块注解为最开始的方案,就只创建一个系统管理员账户;
/*
ApplicationUser _user = new ApplicationUser { Id = Guid.NewGuid().ToString(), UserName = "administrator", Email = "jwc@ybzy.cn", RealName = "教务处", Gender = Gender.男, Birthday = DateTime.Parse("2015/5/1") };
var result = userManager.FindByName(_user.UserName);
if (result == null)
{
userManager.Create(_user, "$Ifkmjb9f");
userManager.SetLockoutEnabled(_user.Id, false);
}
**/
base.Seed(context); //运行父类的方法。
}
}
4、更改应用程序数据库上下文对象。 IdentityConfig.cs
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
//静态构造函数。MSDN:静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。 当程序部署在服务器上时,当第一次登陆的时候,就执行这个初始化器,并填充数据库。
static ApplicationDbContext() //静态构造函数不需要有public 或private 修饰符。
{
//设置数据库初始化器,它就在应用程序运行的时候加载。
//在初始化器中需要建立一个管理员角色和一个具有管理员角色的账户。
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer()); //在System.Data.Entity 命名空间下面。
}
}
5、 //配置角色管理器,以便为每个请求使用单个实例 Start.Auth.cs
public partial class Startup
{
// 有关配置身份验证的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// 配置数据库上下文、用户管理器和登录管理器,以便为每个请求使用单个实例
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
//配置角色管理器,以便为每个请求使用单个实例 //增加的注释
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
asp.net Identity2 角色(Role)的使用(一)初始配置的更多相关文章
- asp.net Identity2 角色(Role)的使用(三)用户管理,用户控制器和视图
修改用户控制器AccountController,增加角色管理器. public class AccountController : Controller { public AccountContro ...
- asp.net Identity2 角色(Role)的使用(二)角色管理,角色控制器和视图
新建一个AdminViewModel 文件,建立视图模型类 public class RoleViewModel { public string Id { get; set; } [Required( ...
- asp.net中使用基于角色role的Forms验证
http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...
- 自学Aruba5.1-Aruba 基于角色(role)的策略管理(重点)
点击返回:自学Aruba之路 自学Aruba5.1-Aruba 基于角色(role)的策略管理(重点) 1. 角色Role介绍 在ArubaOS中,用户(User)指的是已经完成连接,并获取到IP地址 ...
- 在Postgresql中添加新角色(Role)
Postgresql安装完成之后,默认会创建名为postgres的用户.角色(Role)和数据库(Database).而使用你自己原有的用户运行psql时会提示错误. bob@localhost:~$ ...
- ASP.NET vNext (一)- 基本概念和环境配置
ASP.NET vNext (一)- 基本概念和环境配置 转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 编者语:时代在变,在csdn开博一年就发了那么的两篇文章,无论是什么原因都觉得有愧了.但 ...
- Asp.Net调用Office组件操作时的DCOM配置 (转)
Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...
- ASP.NET Identity 角色管理(Roles)
当我们使用ASP.NET 4.5创建模板项目时,会发现模板只提供了ApplicationUserManager用于用户的登录注册.修改.设置等,而没有提供与用户角色相关的代码,对此就需要我们自己手动的 ...
- SQL Server 用角色(Role)管理数据库权限
当数据库越来越多,连接到数据库的应用程序,服务器,账号越来越多的时候,为了既能达到满足账号操作数据权限需求,又不扩大其操作权限,保证数据库的安全性,有时候需要用角色来参与到权限管理中,通过角色做一个权 ...
随机推荐
- poj2773求第K个与m互质的数
//半年前做的,如今回顾一下,还是有所收货的,数的唯一分解,.简单题. #include<iostream> #include<cstring> using namespace ...
- 多平台密码绕过及提权工具Kon-Boot的使用与防范
在单用户的机器上密码可能没那么重要,但是一旦有多个用户可以使用这台机器,密码就显得十分必要了(比如有儿童账户的电脑).所以说为你的电脑增设一条防线的最常用,最简单的方法就是用密码将你的电脑保护起来,但 ...
- javascript 语法规范错误提示代码
“Missing semicolon.” : “缺少分号.”, “Use the function form of \”use strict\”.” : “使用标准化定义function.”, “Un ...
- Echarts 的样例
jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...
- eclipse maven 插件的安装和配置
maven3 安装: 安装 Maven 之前要求先确定你的 JDK 已经安装配置完毕.Maven是 Apache 下的一个项目.眼下最新版本号是 3.0.4.我用的也是这个. 首先去官网下载 Mave ...
- android 浮动窗体学习笔记及个人理解(仿360手机助手)
很感谢原文作者 http://blog.csdn.net/guolin_blog/article/details/8689140 经自己理解 程序执行界面例如以下图: 1.程序入口界面 2.小浮动窗体 ...
- [转] When to use what language and why
Published by Seraphimsan Oct 13, 2010 (last update: Oct 14, 2010) When to use what language and why ...
- MySql InnoDb还原工具
通过任意文件下载找到了mysql的备份,表类型是独享式innodb,由一个frm文件和一个ibd文件组成. 本以为直接复制到本地的mysql数据目录中即可恢复数据,但在查询时却发现并不如所愿: mys ...
- web 开发之js---ajax 中的两种返回状态 xmlhttp.status和 xmlhttp.readyState
(1)xmlhttp.status xmlHttp.status的值(HTTP状态表)0**:未被始化 1**:请求收到,继续处理 2**:操作成功收到,分析.接受 3**:完成此请求必须进一步处理 ...