使用自定义角色在ASP.NET标识中初始化RoleManager

我使用这里的教程将用户数据库的主键从字符串更改为int,但是我在初始化Role Manager时遇到了困难。 它曾经使用过初始化

var roleManager = new RoleManager(new RoleStore(context)); 

如何使用新数据创建角色管理器?

更新:我正在使用MVC 5和EF 6。

您的ApplicationRoleManager可能如下所示。 因为你必须从customRole类而不是IdentityRoleinheritance。

 public class ApplicationRoleManager : RoleManager { public ApplicationRoleManager(IRoleStore roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions options, IOwinContext context) { return new ApplicationRoleManager(new RoleStore(context.Get())); } } 

然后将以下代码添加到Startup.Auth.cs类(如果当前不存在)。

 app.CreatePerOwinContext(ApplicationRoleManager.Create); 

然后,您可以创建和管理角色。

  var roleManager = HttpContext.GetOwinContext().Get(); const string roleName = "Admin"; //Create Role Admin if it does not exist var role = roleManager.FindByName(roleName); if (role == null) { role = new CustomRole(); role.Id = 1; // this will be integer role.Name = roleName; var roleresult = roleManager.Create(role); } 

希望这可以帮助。

根据您的问题,我无法确定您是否使用相同的框架(MVC和EF)。

最近,我使用自定义ApplicationUsers和IdentityRoles创建了一个MVC + EF解决方案。 ApplicationUser派生自“Microsoft.AspNet.Identity.EntityFramework.IdentityUser”。 ApplicationRoles无需更改即可实现。

我有以下课程:

 // Configure the used in the application. RoleManager is defined in the ASP.NET Identity core assembly public class ApplicationRoleManager : RoleManager { public ApplicationRoleManager(IRoleStore roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions options, IOwinContext context) { return new ApplicationRoleManager(new RoleStore(context.Get())); } } 

在configuration.cs(迁移)==>的’update-database’中,这将被执行

  var roleStore = new RoleStore(context); var roleManager = new RoleManager(roleStore); var applicationRoleAdministrator = new IdentityRole("Administrator"); if (!roleManager.RoleExists(applicationRoleAdministrator.Name)) { roleManager.Create(applicationRoleAdministrator); } // do some logic to find your applicationUserAdministrator var applicationUserAdministrator = userManager.FindByName("Administrator"); userManager.AddToRole(applicationUserAdministrator.Id, applicationRoleAdministrator.Name); 

使用startup.auth.cs与RoleManager的链接:

 app.CreatePerOwinContext(ApplicationRoleManager.Create); 

希望这可以帮助。

  var roleManager = new RoleManager(new RoleStore(context)); var UserManager = new UserManager(new UserStore(context)); // In Startup iam creating first Admin Role and creating a default Admin User if (!roleManager.RoleExists("Admin")){ //first we create Admin rool var role = new CustomRole(); role.Name = "Admin"; roleManager.Create(role); } ////Here we create a Admin super user who will maintain the website if (UserManager.FindByName("Admin") == null){ var user = new ApplicationUser() { UserName = "Admin" }; string userPWD = "adminadmin"; var chkUser = UserManager.Create(user, userPWD); if (chkUser.Succeeded){ var result1 = UserManager.AddToRole(user.Id, "Admin") ; } }