BL - UserManager custom role
Let's say when registering a new user to the web api. For my use case (since I am doing role based access priority) I need to create a default role "User" I wonder how it is done normally.
I am thinking about doing it directly inside the program.cs in the server side
In my last project I did it like this hardcode alongside admin user
1 Reply
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using ZelnyTrh.EF.BL;
using ZelnyTrh.EF.DAL.Entities;
namespace ZelnyTrh.EF.DAL.Seeders;
public class RoleSeeder
{
public static async Task SeedRolesAndAdminAsync(IServiceProvider serviceProvider)
{
using var scope = serviceProvider.CreateScope();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
// Seed roles
string[] roleNames = [UserRoles.Administrator, UserRoles.Moderator, UserRoles.User];
foreach (var roleName in roleNames)
{
if (!await roleManager.RoleExistsAsync(roleName))
{
await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
// Seed admin user
var adminEmail = "[email protected]";
var adminUser = await userManager.FindByEmailAsync(adminEmail);
if (adminUser == null)
{
var admin = new ApplicationUser
{
UserName = adminEmail,
Email = adminEmail,
EmailConfirmed = true,
Name = "System Administrator"
};
// Very bad
// TODO: Fix this
var result = await userManager.CreateAsync(admin, "Admin123!");
if (result.Succeeded)
{
await userManager.AddToRoleAsync(admin, UserRoles.Administrator);
}
}
}
}
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using ZelnyTrh.EF.BL;
using ZelnyTrh.EF.DAL.Entities;
namespace ZelnyTrh.EF.DAL.Seeders;
public class RoleSeeder
{
public static async Task SeedRolesAndAdminAsync(IServiceProvider serviceProvider)
{
using var scope = serviceProvider.CreateScope();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
// Seed roles
string[] roleNames = [UserRoles.Administrator, UserRoles.Moderator, UserRoles.User];
foreach (var roleName in roleNames)
{
if (!await roleManager.RoleExistsAsync(roleName))
{
await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
// Seed admin user
var adminEmail = "[email protected]";
var adminUser = await userManager.FindByEmailAsync(adminEmail);
if (adminUser == null)
{
var admin = new ApplicationUser
{
UserName = adminEmail,
Email = adminEmail,
EmailConfirmed = true,
Name = "System Administrator"
};
// Very bad
// TODO: Fix this
var result = await userManager.CreateAsync(admin, "Admin123!");
if (result.Succeeded)
{
await userManager.AddToRoleAsync(admin, UserRoles.Administrator);
}
}
}
}
public async Task SeedRolesAsync(RoleManager<IdentityRole> roleManager)
{
var defaultRole = "User";
if (!await roleManager.RoleExistsAsync(defaultRole))
{
await roleManager.CreateAsync(new IdentityRole(defaultRole));
}
}
public async Task SeedRolesAsync(RoleManager<IdentityRole> roleManager)
{
var defaultRole = "User";
if (!await roleManager.RoleExistsAsync(defaultRole))
{
await roleManager.CreateAsync(new IdentityRole(defaultRole));
}
}