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
spit on that Thang CHO BOC
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);
}
}
}
}
but now I might do like I mentioned inside program.cs
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));
}
}

Did you find this page helpful?