RoleAndUserCreator.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using System.Linq;
  2. using WeApp.Authorization.Roles;
  3. using WeApp.Authorization.Users;
  4. using WeApp.Configuration;
  5. using WeApp.EF;
  6. using WeApp.MultiTenancy;
  7. using IwbZero.Authorization.Base.Permissions;
  8. using IwbZero.Authorization.Base.Users;
  9. using IwbZero.MultiTenancy;
  10. namespace WeApp.SeedData
  11. {
  12. public class RoleAndUserCreator
  13. {
  14. private readonly WeAppDbContext _context;
  15. private int DefaultTenantId { get; set; }
  16. public RoleAndUserCreator(WeAppDbContext context)
  17. {
  18. _context = context;
  19. DefaultTenantId = 1;
  20. }
  21. public void Create()
  22. {
  23. CreateHostUsers();
  24. CreateDefaultTenant();
  25. CreateRolesAndUsers();
  26. }
  27. private void CreateHostUsers()
  28. {
  29. // Admin user for host
  30. var adminUserForHost = _context.Users
  31. .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostAdminName);
  32. if (adminUserForHost == null)
  33. {
  34. var user = User.CreateHostAdminUser();
  35. user.SetNormalizedNames();
  36. adminUserForHost = _context.Users.Add(user);
  37. _context.SaveChanges();
  38. }
  39. AddUserPermission(adminUserForHost.Id, null);
  40. // SYSTEM user for host
  41. var systemUserForHost = _context.Users
  42. .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostSystemName);
  43. if (systemUserForHost == null)
  44. {
  45. var user = User.CreateHostSystemUser();
  46. user.SetNormalizedNames();
  47. systemUserForHost = _context.Users.Add(user);
  48. _context.SaveChanges();
  49. }
  50. AddUserPermission(systemUserForHost.Id, null);
  51. }
  52. private void CreateDefaultTenant()
  53. {
  54. var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Iwb");
  55. if (defaultTenant == null)
  56. {
  57. defaultTenant = _context.Tenants.Add(new Tenant(TenantBase.DefaultTenantName, $"{TenantBase.DefaultTenantName}-租主"));
  58. _context.SaveChanges();
  59. }
  60. DefaultTenantId = defaultTenant.Id;
  61. }
  62. private void CreateRolesAndUsers()
  63. {
  64. // admin role
  65. var adminRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.Admin);
  66. if (adminRole == null)
  67. {
  68. adminRole = _context.Roles
  69. .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin)
  70. {
  71. IsStatic = true,
  72. RoleType = UsersAndRolesTypeDefinition.Supper,
  73. AccountType = AccountTypeDefinition.System,
  74. });
  75. _context.SaveChanges();
  76. }
  77. AddRolePermission(adminRole.Id);
  78. // Admin user
  79. var adminUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.AdminUserName);
  80. if (adminUser == null)
  81. {
  82. adminUser = User.CreateTenantAdminUser(DefaultTenantId);
  83. adminUser.IsEmailConfirmed = true;
  84. adminUser.IsActive = true;
  85. adminUser = _context.Users.Add(adminUser);
  86. _context.SaveChanges();
  87. }
  88. // User Permission
  89. AddUserPermission(adminUser.Id);
  90. // System role
  91. var systemRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.System);
  92. if (systemRole == null)
  93. {
  94. systemRole = _context.Roles
  95. .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.System, StaticRoleNames.Tenants.System)
  96. {
  97. IsStatic = true,
  98. RoleType = UsersAndRolesTypeDefinition.Supper,
  99. AccountType = AccountTypeDefinition.System,
  100. });
  101. _context.SaveChanges();
  102. }
  103. // Role Permission
  104. AddRolePermission(systemRole.Id);
  105. // System user
  106. var systemUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.SystemUserName);
  107. if (systemUser == null)
  108. {
  109. systemUser = User.CreateTenantSystemUser(DefaultTenantId);
  110. systemUser.IsEmailConfirmed = true;
  111. systemUser.IsActive = true;
  112. systemUser = _context.Users.Add(systemUser);
  113. _context.SaveChanges();
  114. // Assign Admin role to admin user
  115. _context.UserRoles.Add(new UserRole(DefaultTenantId, systemUser.Id, systemRole.Id));
  116. _context.SaveChanges();
  117. }
  118. }
  119. #region 添加权限
  120. /// <summary>
  121. /// 添加用户权限
  122. /// </summary>
  123. /// <param name="userId"></param>
  124. /// <param name="tenantId"></param>
  125. private void AddUserPermission(long userId, int? tenantId = 0)
  126. {
  127. tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
  128. var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
  129. foreach (var fun in funs)
  130. {
  131. _context.Permissions.Add(new PermissionSetting()
  132. {
  133. Name = fun.PermissionName,
  134. TenantId = tenantId,
  135. IsGranted = true,
  136. Master = 2,
  137. MasterValue = userId + ""
  138. });
  139. }
  140. _context.SaveChanges();
  141. }
  142. /// <summary>
  143. /// 添加角色权限
  144. /// </summary>
  145. /// <param name="roleId"></param>
  146. /// <param name="tenantId"></param>
  147. private void AddRolePermission(int roleId, int? tenantId = 0)
  148. {
  149. var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
  150. tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
  151. foreach (var fun in funs)
  152. {
  153. _context.Permissions.Add(new PermissionSetting
  154. {
  155. Name = fun.PermissionName,
  156. TenantId = tenantId,
  157. IsGranted = true,
  158. Master = 1,
  159. MasterValue = roleId + ""
  160. });
  161. }
  162. _context.SaveChanges();
  163. }
  164. #endregion
  165. }
  166. }