using (var scope = app.Services.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
await context.Database.EnsureCreatedAsync();
await Api.Seeds.SeedsGenerate.ApplicationSeeds(scope, context);
}
public static class SeedsGenerate
{
public static async Task ApplicationSeeds(IServiceScope scope, ApplicationDbContext context)
{
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var roleClaimManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
// Seed Permissions
DbSet<Permission> dbsetpermission = context.Set<Permission>();
foreach (var actionType in Enum.GetValues<ActionType>())
{
string permissionName = $"{actionType}_Permission";
if (!await dbsetpermission.AnyAsync(p => p.Name == permissionName))
{
await dbsetpermission.AddAsync(new Permission
{
Name = permissionName,
Description = $"Permission to {actionType.ToString().ToLower()}",
ActionType = actionType
});
}
}
var assemblies = new[] { typeof(Product).Assembly, typeof(BaseEntity).Assembly };
var entityTypes = assemblies.SelectMany(assembly => assembly.GetTypes()).Where(type =>
type.IsClass && !type.IsAbstract &&
typeof(IBaseEntity).IsAssignableFrom(type)).ToList();
// Seed Permissions
foreach (var role in DataSeed.RolesSeed)
{
if (!await roleManager.RoleExistsAsync(role.Name))
{
await roleManager.CreateAsync(new IdentityRole
{ Id = role.RoleId, Name = role.Name, NormalizedName = role.Name.ToUpper() });
}
}
foreach (var entityType in entityTypes)
{
foreach (var rolegrant in DataSeed.RolesGrantsSeed)
{
var rol = DataSeed.RolesSeed.FirstOrDefault(x => x.Id == rolegrant.RoleId);
var grt = DataSeed.GrantsSeed.FirstOrDefault(x => x.Id == rolegrant.PermissionId);
roleClaimManager.AddClaimAsync(new IdentityRole { Id = rol!.RoleId },
new Claim("PERMISSION", $"PERMISSION.{entityType.Name}.{grt!.Name}")).Wait();
}
}
// Seed users
foreach (var role in DataSeed.RolesSeed)
{
string rolelower = role.Name.ToLower();
string monthname = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(role.Id);
if (await roleManager.RoleExistsAsync(role.Name) && await userManager.FindByNameAsync(rolelower) is null)
{
var newuser = new ApplicationUser
{
UserName = rolelower,
Email = $"{rolelower}@devinline.com",
FirstName = role.Name,
LastName = $"{monthname} {role.Name}",
PhoneNumber = $"30{role.Id}600900{role.Id}",
Id = role.RoleId
};
await userManager.CreateAsync(newuser, $"{role.Name}..456");
await userManager.AddToRoleAsync(newuser, role.Name);
}
}
}
public class SystemRoles
{
public required int Id { get; set; }
public required string RoleId { get; set; }
public required string Name { get; set; }
}
public class SystemPermissions
{
public required int Id { get; set; }
public required string Name { get; set; }
}
public class SystemRolesPermissions
{
public required int RoleId { get; set; }
public required int PermissionId { get; set; }
}
public static class DataSeed
{
public static List<SystemRoles> RolesSeed =>
[
new() { Id = 1, RoleId = "00000000-0000-0000-0000-000000000001", Name = "Admin" },
new() { Id = 2, RoleId = "00000000-0000-0000-0000-000000000002", Name = "Approver" },
new() { Id = 3, RoleId = "00000000-0000-0000-0000-000000000003", Name = "BasicUser" },
new() { Id = 4, RoleId = "00000000-0000-0000-0000-000000000004", Name = "User" },
new() { Id = 5, RoleId = "00000000-0000-0000-0000-000000000005", Name = "Viewer" },
new() { Id = 6, RoleId = "00000000-0000-0000-0000-000000000006", Name = "Reports" },
new() { Id = 7, RoleId = "00000000-0000-0000-0000-000000000007", Name = "Guest" }
];
public static List<SystemPermissions> GrantsSeed =>
[
new() { Id = 1, Name = "Index" },
new() { Id = 2, Name = "Viewer" },
new() { Id = 3, Name = "Creation" },
new() { Id = 4, Name = "Edition" },
new() { Id = 5, Name = "Activation" },
new() { Id = 6, Name = "Deletion" },
new() { Id = 7, Name = "Exporting" },
new() { Id = 8, Name = "Importing" },
new() { Id = 9, Name = "Assign" },
new() { Id = 10, Name = "Reviewer" },
new() { Id = 11, Name = "Approver" },
new() { Id = 12, Name = "Rejecter" }
];
public static List<SystemRolesPermissions> RolesGrantsSeed =>
[
new (){ RoleId = 1, PermissionId = 1}, new (){ RoleId = 1,PermissionId = 2 }, new (){ RoleId = 1, PermissionId = 3},
new (){ RoleId = 1, PermissionId = 4}, new (){ RoleId = 1,PermissionId = 5 }, new (){ RoleId = 1, PermissionId = 6},
new (){ RoleId = 1, PermissionId = 7}, new (){ RoleId = 1,PermissionId = 8 }, new (){ RoleId = 1, PermissionId = 9},
new (){ RoleId = 1, PermissionId = 10}, new (){ RoleId = 1,PermissionId = 11 }, new (){ RoleId = 1, PermissionId = 12},
new (){ RoleId = 2, PermissionId = 1}, new (){ RoleId = 2,PermissionId = 2 }, new (){ RoleId = 2, PermissionId = 5},
new (){ RoleId = 2, PermissionId = 9}, new (){ RoleId = 2,PermissionId = 11 }, new (){ RoleId = 2, PermissionId = 12},
new (){ RoleId = 3, PermissionId = 1}, new (){ RoleId = 3,PermissionId = 2 }, new (){ RoleId = 3, PermissionId = 3},
new (){ RoleId = 3, PermissionId = 4}, new (){ RoleId = 3,PermissionId = 5 }, new (){ RoleId = 3, PermissionId = 6},
new (){ RoleId = 4, PermissionId = 1}, new (){ RoleId = 4,PermissionId = 2 }, new (){ RoleId = 4, PermissionId = 3},
new (){ RoleId = 4, PermissionId = 4}, new (){ RoleId = 4,PermissionId = 5 }, new (){ RoleId = 4, PermissionId = 6},
new (){ RoleId = 4, PermissionId = 7}, new (){ RoleId = 4,PermissionId = 8 }, new (){ RoleId = 4, PermissionId = 9},
new (){ RoleId = 4, PermissionId = 10}, new (){ RoleId = 5,PermissionId = 1 }, new (){ RoleId = 5, PermissionId = 2},
new (){ RoleId = 5, PermissionId = 7}, new (){ RoleId = 5,PermissionId = 10 }, new (){ RoleId = 6, PermissionId = 1},
new (){ RoleId = 6, PermissionId = 2}, new (){ RoleId = 6,PermissionId = 7 }, new (){ RoleId = 7, PermissionId = 1}
];
}
}