Files
ERP_Distribution/Distribution/Data/Seed/RoleAndPermissionSeed.cs
T
Kalana B. Thilakarathna 9adfff48a7 auth layer implemented
2026-10-09 09:37:05 +05:30

182 lines
18 KiB
C#

using Distribution.Models;
using Microsoft.EntityFrameworkCore;
namespace Distribution.Data.Seed;
public static class RoleAndPermissionSeed
{
private static readonly DateTime SeedDate = new(2026, 8, 18);
private static readonly Guid SalesRepId = new("10000000-0000-0000-0000-000000000001");
private static readonly Guid SupervisorId = new("10000000-0000-0000-0000-000000000002");
private static readonly Guid AreaManagerId = new("10000000-0000-0000-0000-000000000003");
private static readonly Guid AreaSupervisorId = new("10000000-0000-0000-0000-000000000004");
private static readonly Guid RegionalManagerId = new("10000000-0000-0000-0000-000000000005");
private static readonly Guid RegionalAgencyId = new("10000000-0000-0000-0000-000000000006");
// Permission IDs — stable, deterministic
private static readonly Guid P01 = new("20000000-0000-0000-0000-000000000001"); // loading-sheet.view
private static readonly Guid P02 = new("20000000-0000-0000-0000-000000000002"); // loading-sheet.manage
private static readonly Guid P03 = new("20000000-0000-0000-0000-000000000003"); // ride.view
private static readonly Guid P04 = new("20000000-0000-0000-0000-000000000004"); // ride.manage
private static readonly Guid P05 = new("20000000-0000-0000-0000-000000000005"); // delivery-task.view
private static readonly Guid P06 = new("20000000-0000-0000-0000-000000000006"); // delivery-task.manage
private static readonly Guid P07 = new("20000000-0000-0000-0000-000000000007"); // store.view
private static readonly Guid P08 = new("20000000-0000-0000-0000-000000000008"); // store.manage
private static readonly Guid P09 = new("20000000-0000-0000-0000-000000000009"); // invoice.view
private static readonly Guid P10 = new("20000000-0000-0000-0000-000000000010"); // payment.manage
private static readonly Guid P11 = new("20000000-0000-0000-0000-000000000011"); // return.view
private static readonly Guid P12 = new("20000000-0000-0000-0000-000000000012"); // return.manage
private static readonly Guid P13 = new("20000000-0000-0000-0000-000000000013"); // shop-po.view
private static readonly Guid P14 = new("20000000-0000-0000-0000-000000000014"); // stock.view
private static readonly Guid P15 = new("20000000-0000-0000-0000-000000000015"); // stock.manage
private static readonly Guid P16 = new("20000000-0000-0000-0000-000000000016"); // claim.view
private static readonly Guid P17 = new("20000000-0000-0000-0000-000000000017"); // claim.manage
private static readonly Guid P18 = new("20000000-0000-0000-0000-000000000018"); // user.view
private static readonly Guid P19 = new("20000000-0000-0000-0000-000000000019"); // route.view
private static readonly Guid P20 = new("20000000-0000-0000-0000-000000000020"); // scheme.view
private static readonly Guid P21 = new("20000000-0000-0000-0000-000000000021"); // scheme.manage
private static readonly Guid P22 = new("20000000-0000-0000-0000-000000000022"); // route.manage
private static readonly Guid P23 = new("20000000-0000-0000-0000-000000000023"); // price-list.view
private static readonly Guid P24 = new("20000000-0000-0000-0000-000000000024"); // region.view
private static readonly Guid P25 = new("20000000-0000-0000-0000-000000000025"); // price-list.manage
private static readonly Guid P26 = new("20000000-0000-0000-0000-000000000026"); // grn.view
private static readonly Guid P27 = new("20000000-0000-0000-0000-000000000027"); // grn.manage
private static readonly Guid P28 = new("20000000-0000-0000-0000-000000000028"); // supplier.view
private static readonly Guid P29 = new("20000000-0000-0000-0000-000000000029"); // region.manage
private static readonly Guid P30 = new("20000000-0000-0000-0000-000000000030"); // warehouse.view
private static readonly Guid P31 = new("20000000-0000-0000-0000-000000000031"); // warehouse.manage
private static readonly Guid P32 = new("20000000-0000-0000-0000-000000000032"); // purchase-order.view
private static readonly Guid P33 = new("20000000-0000-0000-0000-000000000033"); // purchase-order.manage
private static readonly Guid P34 = new("20000000-0000-0000-0000-000000000034"); // purchase-return.manage
private static readonly Guid P35 = new("20000000-0000-0000-0000-000000000035"); // supplier-claim.view
private static readonly Guid P36 = new("20000000-0000-0000-0000-000000000036"); // supplier-claim.manage
private static readonly Guid P37 = new("20000000-0000-0000-0000-000000000037"); // brand.view
private static readonly Guid P38 = new("20000000-0000-0000-0000-000000000038"); // brand.manage
private static readonly Guid P39 = new("20000000-0000-0000-0000-000000000039"); // category.view
private static readonly Guid P40 = new("20000000-0000-0000-0000-000000000040"); // category.manage
private static readonly Guid P41 = new("20000000-0000-0000-0000-000000000041"); // item.view
private static readonly Guid P42 = new("20000000-0000-0000-0000-000000000042"); // item.manage
private static readonly Guid P43 = new("20000000-0000-0000-0000-000000000043"); // uom.view
private static readonly Guid P44 = new("20000000-0000-0000-0000-000000000044"); // uom.manage
private static readonly Guid P45 = new("20000000-0000-0000-0000-000000000045"); // vehicle.view
private static readonly Guid P46 = new("20000000-0000-0000-0000-000000000046"); // vehicle.manage
private static readonly Guid P47 = new("20000000-0000-0000-0000-000000000047"); // driver.view
private static readonly Guid P48 = new("20000000-0000-0000-0000-000000000048"); // driver.manage
private static readonly Guid P49 = new("20000000-0000-0000-0000-000000000049"); // role.view
private static readonly Guid P50 = new("20000000-0000-0000-0000-000000000050"); // user.manage
private static readonly Guid P51 = new("20000000-0000-0000-0000-000000000051"); // sync.manage
private static readonly Guid P52 = new("20000000-0000-0000-0000-000000000052"); // sys-config.view
private static readonly Guid P53 = new("20000000-0000-0000-0000-000000000053"); // sys-config.manage
private static readonly Guid P54 = new("20000000-0000-0000-0000-000000000054"); // supplier.manage
public static void Apply(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>().HasData(
new Role { Id = SalesRepId, Name = "SalesRep", Level = 10, CreatedAt = SeedDate, IsActive = true },
new Role { Id = SupervisorId, Name = "Supervisor", Level = 20, CreatedAt = SeedDate, IsActive = true },
new Role { Id = AreaManagerId, Name = "AreaManager", Level = 30, CreatedAt = SeedDate, IsActive = true },
new Role { Id = AreaSupervisorId, Name = "AreaSupervisor", Level = 40, CreatedAt = SeedDate, IsActive = true },
new Role { Id = RegionalManagerId,Name = "RegionalManager",Level = 50, CreatedAt = SeedDate, IsActive = true },
new Role { Id = RegionalAgencyId, Name = "RegionalAgency", Level = 60, CreatedAt = SeedDate, IsActive = true }
);
modelBuilder.Entity<Permission>().HasData(
new Permission { Id = P01, Code = "loading-sheet.view", Description = "View loading sheets", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P02, Code = "loading-sheet.manage", Description = "Create/edit loading sheets", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P03, Code = "ride.view", Description = "View rides", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P04, Code = "ride.manage", Description = "Create/manage rides", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P05, Code = "delivery-task.view", Description = "View delivery tasks", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P06, Code = "delivery-task.manage", Description = "Manage delivery tasks", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P07, Code = "store.view", Description = "View stores", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P08, Code = "store.manage", Description = "Create/edit stores", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P09, Code = "invoice.view", Description = "View invoices", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P10, Code = "payment.manage", Description = "Record payments", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P11, Code = "return.view", Description = "View returns", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P12, Code = "return.manage", Description = "Create/manage returns", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P13, Code = "shop-po.view", Description = "View shop purchase orders", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P14, Code = "stock.view", Description = "View stock", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P15, Code = "stock.manage", Description = "Manage stock movements", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P16, Code = "claim.view", Description = "View claims", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P17, Code = "claim.manage", Description = "Create/settle claims", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P18, Code = "user.view", Description = "View users", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P19, Code = "route.view", Description = "View routes", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P20, Code = "scheme.view", Description = "View schemes", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P21, Code = "scheme.manage", Description = "Create/edit schemes", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P22, Code = "route.manage", Description = "Create/edit routes", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P23, Code = "price-list.view", Description = "View price lists", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P24, Code = "region.view", Description = "View regions", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P25, Code = "price-list.manage", Description = "Create/edit price lists", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P26, Code = "grn.view", Description = "View goods receipts", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P27, Code = "grn.manage", Description = "Create goods receipts", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P28, Code = "supplier.view", Description = "View suppliers", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P29, Code = "region.manage", Description = "Create/edit regions", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P30, Code = "warehouse.view", Description = "View warehouses", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P31, Code = "warehouse.manage", Description = "Create/edit warehouses", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P32, Code = "purchase-order.view", Description = "View purchase orders", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P33, Code = "purchase-order.manage", Description = "Create/manage purchase orders",CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P34, Code = "purchase-return.manage", Description = "Create purchase returns", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P35, Code = "supplier-claim.view", Description = "View supplier claims", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P36, Code = "supplier-claim.manage", Description = "Manage supplier claims", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P37, Code = "brand.view", Description = "View brands", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P38, Code = "brand.manage", Description = "Create/edit brands", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P39, Code = "category.view", Description = "View categories", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P40, Code = "category.manage", Description = "Create/edit categories", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P41, Code = "item.view", Description = "View items", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P42, Code = "item.manage", Description = "Create/edit items", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P43, Code = "uom.view", Description = "View units of measure", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P44, Code = "uom.manage", Description = "Create/edit units of measure", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P45, Code = "vehicle.view", Description = "View vehicles", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P46, Code = "vehicle.manage", Description = "Create/edit vehicles", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P47, Code = "driver.view", Description = "View driver profiles", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P48, Code = "driver.manage", Description = "Manage driver profiles", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P49, Code = "role.view", Description = "View roles", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P50, Code = "user.manage", Description = "Create/edit/deactivate users", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P51, Code = "sync.manage", Description = "Trigger data sync", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P52, Code = "sys-config.view", Description = "View system config", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P53, Code = "sys-config.manage", Description = "Edit system config", CreatedAt = SeedDate, IsActive = true },
new Permission { Id = P54, Code = "supplier.manage", Description = "Create/edit suppliers", CreatedAt = SeedDate, IsActive = true }
);
// RolePermission seed — cumulative by role level
// Each row needs a stable Id because RolePermission inherits Template
// Using 30000000-00RR-0000-0000-00000000PPPP (RR = role index, PPPP = permission index)
var rp = new List<RolePermission>();
// SalesRep (10): P01-P15
var salesRepPermissions = new[] { P01, P02, P03, P04, P05, P06, P07, P09, P10, P11, P12, P13, P14, P15 };
foreach (var (p, i) in salesRepPermissions.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0001-0000-0000-{i:D12}"), SalesRepId, p));
// Supervisor (20): + P16-P20
var supervisorExtra = new[] { P16, P17, P18, P19, P20 };
foreach (var (p, i) in supervisorExtra.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0002-0000-0000-{i:D12}"), SupervisorId, p));
// AreaManager (30): + P08, P21, P22, P23
var areaManagerExtra = new[] { P08, P21, P22, P23 };
foreach (var (p, i) in areaManagerExtra.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0003-0000-0000-{i:D12}"), AreaManagerId, p));
// AreaSupervisor (40): + P24, P25, P26, P27, P28
var areaSupervisorExtra = new[] { P24, P25, P26, P27, P28 };
foreach (var (p, i) in areaSupervisorExtra.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0004-0000-0000-{i:D12}"), AreaSupervisorId, p));
// RegionalManager (50): + P29-P36
var regionalManagerExtra = new[] { P29, P30, P31, P32, P33, P34, P35, P36 };
foreach (var (p, i) in regionalManagerExtra.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0005-0000-0000-{i:D12}"), RegionalManagerId, p));
// RegionalAgency (60): + P37-P54
var regionalAgencyExtra = new[] { P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54 };
foreach (var (p, i) in regionalAgencyExtra.Select((p, i) => (p, i + 1)))
rp.Add(Rp(new Guid($"30000000-0006-0000-0000-{i:D12}"), RegionalAgencyId, p));
modelBuilder.Entity<RolePermission>().HasData(rp);
}
private static RolePermission Rp(Guid id, Guid roleId, Guid permissionId) =>
new() { Id = id, FK_RoleId = roleId, FK_PermissionId = permissionId, CreatedAt = SeedDate, IsActive = true };
}