RoleAndUserCreator.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. using System.Collections.Generic;
  2. using System.Configuration;
  3. using System.Linq;
  4. using ContractService.Authorization;
  5. using ContractService.Authorization.Roles;
  6. using ContractService.Authorization.Users;
  7. using ContractService.Configuration;
  8. using ContractService.EF;
  9. using ContractService.MultiTenancy;
  10. using IwbZero.Authorization.Base.Permissions;
  11. using IwbZero.Authorization.Base.Users;
  12. using IwbZero.MultiTenancy;
  13. namespace ContractService.SeedData
  14. {
  15. public class RoleAndUserCreator
  16. {
  17. private readonly ContractServiceDbContext _context;
  18. private int DefaultTenantId { get; set; }
  19. public RoleAndUserCreator(ContractServiceDbContext context)
  20. {
  21. _context = context;
  22. DefaultTenantId = 1;
  23. }
  24. public void Create()
  25. {
  26. _context.Database.ExecuteSqlCommand("TRUNCATE TABLE [dbo].[Sys_Permissions]");
  27. CreateHostUsers();
  28. CreateDefaultTenant();
  29. CreateRolesAndUsers();
  30. CreateDefaultRoles();
  31. }
  32. private void CreateHostUsers()
  33. {
  34. // Admin user for host
  35. var adminUserForHost = _context.Users
  36. .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostAdminName);
  37. if (adminUserForHost == null)
  38. {
  39. var user = User.CreateHostAdminUser();
  40. user.SetNormalizedNames();
  41. adminUserForHost = _context.Users.Add(user);
  42. _context.SaveChanges();
  43. }
  44. AddUserPermission(adminUserForHost.Id, null);
  45. // SYSTEM user for host
  46. var systemUserForHost = _context.Users
  47. .FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostSystemName);
  48. if (systemUserForHost == null)
  49. {
  50. var user = User.CreateHostSystemUser();
  51. user.SetNormalizedNames();
  52. systemUserForHost = _context.Users.Add(user);
  53. _context.SaveChanges();
  54. }
  55. AddUserPermission(systemUserForHost.Id, null);
  56. }
  57. private void CreateDefaultTenant()
  58. {
  59. var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Iwb");
  60. if (defaultTenant == null)
  61. {
  62. defaultTenant = _context.Tenants.Add(new Tenant(TenantBase.DefaultTenantName, $"{TenantBase.DefaultTenantName}-租主"));
  63. _context.SaveChanges();
  64. }
  65. DefaultTenantId = defaultTenant.Id;
  66. }
  67. private void CreateRolesAndUsers()
  68. {
  69. // admin role
  70. var adminRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.Admin);
  71. if (adminRole == null)
  72. {
  73. adminRole = _context.Roles
  74. .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin)
  75. {
  76. IsStatic = true,
  77. RoleType = UsersAndRolesTypeDefinition.Supper,
  78. AccountType = AccountTypeDefinition.System,
  79. });
  80. _context.SaveChanges();
  81. }
  82. AddRolePermission(adminRole.Id);
  83. // Admin user
  84. var adminUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.AdminUserName);
  85. if (adminUser == null)
  86. {
  87. adminUser = User.CreateTenantAdminUser(DefaultTenantId);
  88. adminUser.IsEmailConfirmed = true;
  89. adminUser.IsActive = true;
  90. adminUser = _context.Users.Add(adminUser);
  91. _context.SaveChanges();
  92. }
  93. // User Permission
  94. AddUserPermission(adminUser.Id);
  95. // System role
  96. var systemRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.System);
  97. if (systemRole == null)
  98. {
  99. systemRole = _context.Roles
  100. .Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.System, StaticRoleNames.Tenants.System)
  101. {
  102. IsStatic = true,
  103. RoleType = UsersAndRolesTypeDefinition.Supper,
  104. AccountType = AccountTypeDefinition.System,
  105. });
  106. _context.SaveChanges();
  107. }
  108. // Role Permission
  109. AddRolePermission(systemRole.Id);
  110. // System user
  111. var systemUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.SystemUserName);
  112. if (systemUser == null)
  113. {
  114. systemUser = User.CreateTenantSystemUser(DefaultTenantId);
  115. systemUser.IsEmailConfirmed = true;
  116. systemUser.IsActive = true;
  117. systemUser = _context.Users.Add(systemUser);
  118. _context.SaveChanges();
  119. // Assign Admin role to admin user
  120. _context.UserRoles.Add(new UserRole(DefaultTenantId, systemUser.Id, systemRole.Id));
  121. _context.SaveChanges();
  122. }
  123. }
  124. #region 添加权限
  125. /// <summary>
  126. /// 添加用户权限
  127. /// </summary>
  128. /// <param name="userId"></param>
  129. /// <param name="tenantId"></param>
  130. private void AddUserPermission(long userId, int? tenantId = 0)
  131. {
  132. tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
  133. var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
  134. foreach (var fun in funs)
  135. {
  136. _context.Permissions.Add(new PermissionSetting()
  137. {
  138. Name = fun.PermissionName,
  139. TenantId = tenantId,
  140. IsGranted = true,
  141. Master = 2,
  142. MasterValue = userId + ""
  143. });
  144. }
  145. _context.SaveChanges();
  146. }
  147. /// <summary>
  148. /// 添加角色权限
  149. /// </summary>
  150. /// <param name="roleId"></param>
  151. /// <param name="tenantId"></param>
  152. private void AddRolePermission(int roleId, int? tenantId = 0)
  153. {
  154. var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
  155. tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
  156. foreach (var fun in funs)
  157. {
  158. _context.Permissions.Add(new PermissionSetting
  159. {
  160. Name = fun.PermissionName,
  161. TenantId = tenantId,
  162. IsGranted = true,
  163. Master = 1,
  164. MasterValue = roleId + ""
  165. });
  166. }
  167. _context.SaveChanges();
  168. }
  169. #endregion
  170. readonly List<string> sys= new List<string>()
  171. {
  172. PermissionNames.Pages,
  173. PermissionNames.PagesCaseContractMg ,
  174. PermissionNames.PagesCaseContractMgCaseMg,
  175. PermissionNames.PagesCaseContractMgCaseMgQuery,
  176. PermissionNames.PagesCaseContractMgContractMg,
  177. PermissionNames.PagesCaseContractMgContractMgQuery,
  178. PermissionNames.PagesCaseContractMgContractMgSetLawFirm,
  179. PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
  180. PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
  181. PermissionNames.PagesLegalLawFirmMg,
  182. PermissionNames.PagesLegalLawFirmMgLawFirmMg,
  183. PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery,
  184. PermissionNames.PagesLegalLawFirmMgLawyerMg,
  185. PermissionNames.PagesLegalLawFirmMgLawyerMgQuery,
  186. PermissionNames.PagesClientMg,
  187. PermissionNames.PagesClientMgCompanyMg,
  188. PermissionNames.PagesClientMgCompanyMgQuery,
  189. PermissionNames.PagesClientMgStaffMg,
  190. PermissionNames.PagesClientMgStaffMgQuery,
  191. PermissionNames.PagesBasicMg,
  192. PermissionNames.PagesBasicMgServiceTypeMg,
  193. PermissionNames.PagesBasicMgServiceTypeMgQuery,
  194. PermissionNames.PagesBasicMgServiceTypeMgCreate,
  195. PermissionNames.PagesBasicMgServiceTypeMgUpdate,
  196. PermissionNames.PagesBasicMgServiceTypeMgDelete,
  197. PermissionNames.PagesSystemMg,
  198. PermissionNames.PagesSystemMgUserMg,
  199. PermissionNames.PagesSystemMgUserMgQuery,
  200. PermissionNames.PagesSystemMgUserMgCreate,
  201. PermissionNames.PagesSystemMgUserMgUpdate,
  202. PermissionNames.PagesSystemMgUserMgAuth,
  203. PermissionNames.PagesSystemMgUserMgResetLock,
  204. PermissionNames.PagesSystemMgHelpMg,
  205. PermissionNames.PagesSystemMgHelpMgQuery,
  206. PermissionNames.PagesSystemMgHelpMgCreate,
  207. PermissionNames.PagesSystemMgHelpMgUpdate,
  208. PermissionNames.PagesSystemMgHelpMgDelete,
  209. PermissionNames.PagesSystemMgLogMg,
  210. PermissionNames.PagesSystemMgLogMgQuery,
  211. PermissionNames.PagesUserHelpInfo,
  212. PermissionNames.PagesUserSysSetting,
  213. PermissionNames.PagesUserSysSettingLoginImage,
  214. PermissionNames.PagesUserSysSettingHomeImage,
  215. PermissionNames.PagesUserSysSettingRefreshCache,
  216. PermissionNames.PagesUserSysSettingRefreshLang,
  217. };
  218. readonly List<string> company= new List<string>()
  219. {
  220. PermissionNames.Pages,
  221. PermissionNames.PagesCaseContractMg ,
  222. PermissionNames.PagesCaseContractMgCaseMg,
  223. PermissionNames.PagesCaseContractMgCaseMgQuery,
  224. PermissionNames.PagesCaseContractMgCaseMgCreate,
  225. PermissionNames.PagesCaseContractMgCaseMgUpdate,
  226. PermissionNames.PagesCaseContractMgCaseMgDelete,
  227. PermissionNames.PagesCaseContractMgCaseMgSetStaff,
  228. PermissionNames.PagesCaseContractMgCaseMgChangeState,
  229. PermissionNames.PagesCaseContractMgCaseMgNote,
  230. PermissionNames.PagesCaseContractMgCaseMgRestart,
  231. PermissionNames.PagesCaseContractMgContractMg,
  232. PermissionNames.PagesCaseContractMgContractMgQuery,
  233. PermissionNames.PagesCaseContractMgContractMgCreate,
  234. PermissionNames.PagesCaseContractMgContractMgUpdate,
  235. PermissionNames.PagesCaseContractMgContractMgDelete,
  236. PermissionNames.PagesCaseContractMgContractMgSetStaff,
  237. PermissionNames.PagesCaseContractMgContractMgChangeState,
  238. PermissionNames.PagesCaseContractMgContractMgNote,
  239. PermissionNames.PagesCaseContractMgContractMgSupplement,
  240. PermissionNames.PagesCaseContractMgContractMgRestart,
  241. PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
  242. PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
  243. PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate,
  244. PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate,
  245. PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete,
  246. PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState,
  247. PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeEvidence,
  248. PermissionNames.PagesCaseContractMgContractMgKeyPointMgSetOrg,
  249. PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart,
  250. PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote,
  251. PermissionNames.PagesClientMg,
  252. PermissionNames.PagesClientMgCompanyMg,
  253. PermissionNames.PagesClientMgCompanyMgQuery,
  254. PermissionNames.PagesClientMgCompanyMgCreate,
  255. PermissionNames.PagesClientMgCompanyMgUpdate,
  256. PermissionNames.PagesClientMgCompanyMgDelete,
  257. PermissionNames.PagesClientMgCompanyMgMasterStaff,
  258. PermissionNames.PagesClientMgStaffMg,
  259. PermissionNames.PagesClientMgStaffMgQuery,
  260. PermissionNames.PagesClientMgStaffMgCreate,
  261. PermissionNames.PagesClientMgStaffMgUpdate,
  262. PermissionNames.PagesClientMgStaffMgDelete,
  263. PermissionNames.PagesClientMgStaffMgBind,
  264. PermissionNames.PagesClientMgStaffMgUnBind,
  265. PermissionNames.PagesClientMgOrgMg,
  266. PermissionNames.PagesClientMgOrgMgQuery,
  267. PermissionNames.PagesClientMgOrgMgCreate,
  268. PermissionNames.PagesClientMgOrgMgUpdate,
  269. PermissionNames.PagesClientMgOrgMgDelete,
  270. PermissionNames.PagesClientMgOrgMgOrgAuth,
  271. PermissionNames.PagesSystemMg,
  272. //PermissionNames.PagesSystemMgUserMg,
  273. //PermissionNames.PagesSystemMgUserMgQuery,
  274. //PermissionNames.PagesSystemMgUserMgCreate,
  275. //PermissionNames.PagesSystemMgUserMgUpdate,
  276. //PermissionNames.PagesSystemMgUserMgAuth,
  277. //PermissionNames.PagesSystemMgUserMgResetLock,
  278. PermissionNames.PagesUserHelpInfo,
  279. PermissionNames.PagesUserSysSetting,
  280. PermissionNames.PagesUserSysSettingLoginImage,
  281. PermissionNames.PagesUserSysSettingHomeImage,
  282. PermissionNames.PagesUserSysSettingRefreshCache,
  283. PermissionNames.PagesUserSysSettingRefreshLang,
  284. };
  285. readonly List<string> lawFirm= new List<string>()
  286. {
  287. PermissionNames.Pages,
  288. PermissionNames.PagesCaseContractMg ,
  289. PermissionNames.PagesCaseContractMgCaseMg,
  290. PermissionNames.PagesCaseContractMgCaseMgQuery,
  291. PermissionNames.PagesCaseContractMgContractMg,
  292. PermissionNames.PagesCaseContractMgContractMgQuery,
  293. PermissionNames.PagesCaseContractMgContractMgNote,
  294. PermissionNames.PagesCaseContractMgContractMgLawNote,
  295. PermissionNames.PagesCaseContractMgContractMgSetLawyer,
  296. PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
  297. PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
  298. PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate,
  299. PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate,
  300. PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete,
  301. PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState,
  302. PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart,
  303. PermissionNames.PagesCaseContractMgContractMgKeyPointMgLawNote,
  304. PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote,
  305. PermissionNames.PagesLegalLawFirmMg,
  306. PermissionNames.PagesLegalLawFirmMgLawFirmMg,
  307. PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery,
  308. PermissionNames.PagesLegalLawFirmMgLawFirmMgCreate,
  309. PermissionNames.PagesLegalLawFirmMgLawFirmMgUpdate,
  310. PermissionNames.PagesLegalLawFirmMgLawFirmMgDelete,
  311. PermissionNames.PagesLegalLawFirmMgLawFirmMgMasterLawyer,
  312. PermissionNames.PagesLegalLawFirmMgLawyerMg,
  313. PermissionNames.PagesLegalLawFirmMgLawyerMgQuery,
  314. PermissionNames.PagesLegalLawFirmMgLawyerMgCreate,
  315. PermissionNames.PagesLegalLawFirmMgLawyerMgUpdate,
  316. PermissionNames.PagesLegalLawFirmMgLawyerMgDelete,
  317. PermissionNames.PagesLegalLawFirmMgLawyerMgBind,
  318. PermissionNames.PagesLegalLawFirmMgLawyerMgUnBind,
  319. PermissionNames.PagesLegalLawFirmMgLawOrgMg,
  320. PermissionNames.PagesLegalLawFirmMgLawOrgMgQuery,
  321. PermissionNames.PagesLegalLawFirmMgLawOrgMgCreate,
  322. PermissionNames.PagesLegalLawFirmMgLawOrgMgUpdate,
  323. PermissionNames.PagesLegalLawFirmMgLawOrgMgDelete,
  324. PermissionNames.PagesLegalLawFirmMgLawOrgMgOrgAuth,
  325. PermissionNames.PagesSystemMg,
  326. //PermissionNames.PagesSystemMgUserMg,
  327. //PermissionNames.PagesSystemMgUserMgQuery,
  328. //PermissionNames.PagesSystemMgUserMgCreate,
  329. //PermissionNames.PagesSystemMgUserMgUpdate,
  330. //PermissionNames.PagesSystemMgUserMgAuth,
  331. //PermissionNames.PagesSystemMgUserMgResetLock,
  332. PermissionNames.PagesUserHelpInfo,
  333. PermissionNames.PagesUserSysSetting,
  334. PermissionNames.PagesUserSysSettingLoginImage,
  335. PermissionNames.PagesUserSysSettingHomeImage,
  336. PermissionNames.PagesUserSysSettingRefreshCache,
  337. PermissionNames.PagesUserSysSettingRefreshLang,
  338. };
  339. private void CreateDefaultRoles()
  340. {
  341. CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.System"], "系统管理员默认角色",
  342. UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.System, sys);
  343. CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.Company"], "企业负责人默认角色",
  344. UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Client, company);
  345. CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.LawFirm"], "律所负责人默认角色",
  346. UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Lawyer, lawFirm);
  347. }
  348. private void CreateRole(string name,string displayName,int roleType,int accountType,List<string> permList)
  349. {
  350. var role = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == name);
  351. if (role == null)
  352. {
  353. role = _context.Roles
  354. .Add(new Role(DefaultTenantId, name, displayName)
  355. {
  356. IsStatic = true,
  357. RoleType = roleType,
  358. AccountType = accountType,
  359. Description = displayName
  360. });
  361. _context.SaveChanges();
  362. }
  363. if (permList != null)
  364. {
  365. foreach (var perm in permList)
  366. {
  367. _context.Permissions.Add(new PermissionSetting
  368. {
  369. Name = perm,
  370. TenantId = DefaultTenantId,
  371. IsGranted = true,
  372. Master = 1,
  373. MasterValue = role.Id + ""
  374. });
  375. }
  376. }
  377. }
  378. }
  379. }