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,增加属性Description。
public class ApplicationRole : IdentityRole { public ApplicationRole(): base(){ } public ApplicationRole(string roleName) : this() { base.Name = roleName; }
[Display(Name = "角色描述")] public string Description { get; set; } } |
1.1.2. 新增ApplicationRoleManager
修改IdentityConfig.cs,增加ApplicationRoleManager,继承自RoleManager,提供静态方法Create。
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>())); } } |
1.1.3. 启用ApplicationRoleManager
修改Startup.Auth.cs,配置角色管理器,本质上是在MVC启动阶段注册实例,供后继的请求服务使用。
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); |
1.1.4. 新增ViewModel
新建AdminViewModel.cs,添加RoleViewModel、EditUserViewModel。
public class RoleViewModel { public string Id { get; set; } [Required(AllowEmptyStrings = false)] [Display(Name = "角色名称")] public string Name { get; set; } [Display(Name="角色描述")] public string Description { get; set; } } |
EditUserViewModel
public class EditUserViewModel { public string Id { get; set; } [Display(Name="用户名")] [Required] public string UserName { get; set; }
[Required(AllowEmptyStrings = false)] [Display(Name = "电邮地址")] [EmailAddress] public string Email { get; set; }
public IEnumerable<SelectListItem> RolesList { get; set; } } |
1.1.5. 添加CRUD管理功能
为Role与User管理添加相应的MVC部件,这里不再累述可参考AccountController等,为了方便可先使用MVC的支架功能,然后修改细节。
1.1.6. 运行效果
运行效果如下图所示。
1) 用户管理
2) 角色管理