Creating Roles in Asp.net Identity MVC 5

前端 未结 11 1387
情深已故
情深已故 2020-12-02 05:09

There is very little documentation about using the new Asp.net Identity Security Framework.

I have pieced together what I could to try and create a new Role and add

11条回答
  •  情歌与酒
    2020-12-02 05:36

    In ASP.NET 5 rc1-final, I did following:

    Created ApplicationRoleManager (in similar manner as there is ApplicationUser created by template)

    public class ApplicationRoleManager : RoleManager
    {
        public ApplicationRoleManager(
            IRoleStore store,
            IEnumerable> roleValidators,
            ILookupNormalizer keyNormalizer,
            IdentityErrorDescriber errors,
            ILogger> logger,
            IHttpContextAccessor contextAccessor)
            : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
        {
        }
    }
    

    To ConfigureServices in Startup.cs, I added it as RoleManager

    services.
        .AddIdentity()
        .AddRoleManager();
    

    For creating new Roles, call from Configure following:

    public static class RoleHelper
    {
        private static async Task EnsureRoleCreated(RoleManager roleManager, string roleName)
        {
            if (!await roleManager.RoleExistsAsync(roleName))
            {
                await roleManager.CreateAsync(new IdentityRole(roleName));
            }
        }
        public static async Task EnsureRolesCreated(this RoleManager roleManager)
        {
            // add all roles, that should be in database, here
            await EnsureRoleCreated(roleManager, "Developer");
        }
    }
    
    public async void Configure(..., RoleManager roleManager, ...)
    {
         ...
         await roleManager.EnsureRolesCreated();
         ...
    }
    

    Now, the rules can be assigned to user

    await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer");
    

    Or used in Authorize attribute

    [Authorize(Roles = "Developer")]
    public class DeveloperController : Controller
    {
    }
    

提交回复
热议问题