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="[email protected]",UserName="administrator",RealName="教务处",Gender= Gender.男,Birthday=DateTime.Parse("2002-7-1")},
new ApplicationUser { Email="[email protected]",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 = "[email protected]", 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);

时间: 2025-01-20 05:25:45

asp.net Identity2 角色(Role)的使用(一)的相关文章

asp.net Identity2 角色(Role)的使用(三)用户管理,用户控制器和视图

修改用户控制器AccountController,增加角色管理器. public class AccountController : Controller { public AccountController() { } public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, ApplicationRoleManager roleManager ) {

asp.net Identity2 角色(Role)的使用(二)

新建一个AdminViewModel 文件,建立视图模型类 public class RoleViewModel { public string Id { get; set; } [Required(AllowEmptyStrings=false)] [Display(Name="角色名称")] public string Name { get; set; } [Display(Name="角色描述")] [StringLength(50,ErrorMessage=

asp.net中使用基于角色role的Forms验证

http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统web.config system.web> <authentication mode="Forms" >  <forms name=".yaoCookies" loginUrl="/duan/Manage/login.aspx&quo

Oracle DCL(Data Control Language)数据控制语言(权限privilege,角色role,用户user介绍)

1.如何控制用户访问 1.身份验证,认证:Authentication 2.授权:Authorization 3.审计:Audit 2.权限 数据库安全: -系统安全 -数据安全 系统权限:数据库中执行一个特定操作 对象权限:操纵数据库的对象的内容 可用的系统权限有100多个 数据库管理员有高层次的系统权限,可以完成 -创建一个新用户 -删除用户 -删除表 -备份表 3.创建用户 DBA使用CREATE USER语句创建用户 CREATE USER user identified BY pass

ASP.net Membership角色与权限管理(一)

ASP.net Membership角色与权限管理(一) 本文目录:1.membership简介2.membership在sql server中的设置3.配置web.config4.创建用户CreateUserWizard控件5.用户登录login控件6.显示当前用户的名称LoginName控件7.检测用户的身份验证状态的LoginStatus控件8.为不同类别用户呈现不同内容的LoginView控件9.更改密码的ChangePassword控件10.自助找回密码的PasswordRecover

在Postgresql中添加新角色(Role)

Postgresql安装完成之后,默认会创建名为postgres的用户.角色(Role)和数据库(Database).而使用你自己原有的用户运行psql时会提示错误. [email protected]:~$ psql psql: FATAL: role "bob" does not exist 如果想要使用自己的用户"bob"来运行psql,就需要在Postgresql中添加名为"bob"的角色(Role). [email protected]

playbook核心元素之 --&gt; 角色role(9)

playbook核心元素之 --> 角色role 角色: 以特定的层级目录结构进行组织的tasks.variables.handlers.templates.files等: role_name/     files/:存储由copy或script等模块调用的文件:     tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task; 其它的文件需要由main.yml进行"包含"调用;     handlers/:此目录中至少应该有一个名为main.yml的

ASP.NET Identity “角色-权限”管理 3

1.1.       Role管理 参考1:ASP.NET Identity 2.0: Customizing Users and Roles 参考2:asp.net identity 2.2.0 中角色启用和基本使用(一) 1.1.1.      增加ApplicationRole 新建ApplicationRole,可参考ApplicationUser,过程如下所述. 修改IdentityModel.cs,新增ApplicationRole,继承自IdentityRole,增加属性Descr

ASP.NET Identity “角色-权限”管理 1

本文是基于ASP.NET Identity v2的实施的“角色-权限”实验小结,不对基础知识进行介绍,读者需理解面向对象.接口编程.AOP.MVC,掌握ASP.NET MVC.JavaScript和EF. 环境:VS2013 update4,EF6,ASP.NET MVC 5,bootstrap,Automapper,MvcPager等. 1.       前言 VS2013 ASP.NET MVC模板只提供基础的Role-User权限管理,如:账号管理Account,登录注册等,为提高实用性,