17 noviembre 2025

C# Services Create Scope and Generate Seeds

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}

   ];

  }

}