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

gre*_*g.y 18 c# asp.net asp.net-identity

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

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
Run Code Online (Sandbox Code Playgroud)

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

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

DSR*_*DSR 31

ApplicationRoleManager可能看起来像这样.因为你必须从customRole类继承而不是IdentityRole.

public class ApplicationRoleManager : RoleManager<CustomRole, int>
{
    public ApplicationRoleManager(IRoleStore<CustomRole, int> roleStore)
        : base(roleStore)
    {
    }

    public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
    {
        return new ApplicationRoleManager(new RoleStore<CustomRole, int, CustomUserRole>(context.Get<ApplicationDbContext>()));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
Run Code Online (Sandbox Code Playgroud)

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

    var roleManager = HttpContext.GetOwinContext().Get<ApplicationRoleManager>();

    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);
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.