using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using ContractService.Authorization;
using ContractService.Authorization.Roles;
using ContractService.Authorization.Users;
using ContractService.Configuration;
using ContractService.EF;
using ContractService.MultiTenancy;
using IwbZero.Authorization.Base.Permissions;
using IwbZero.Authorization.Base.Users;
using IwbZero.MultiTenancy;
namespace ContractService.SeedData
{
public class RoleAndUserCreator
{
private readonly ContractServiceDbContext _context;
private int DefaultTenantId { get; set; }
public RoleAndUserCreator(ContractServiceDbContext context)
{
_context = context;
DefaultTenantId = 1;
}
public void Create()
{
_context.Database.ExecuteSqlCommand("TRUNCATE TABLE [dbo].[Sys_Permissions]");
CreateHostUsers();
CreateDefaultTenant();
CreateRolesAndUsers();
CreateDefaultRoles();
}
private void CreateHostUsers()
{
// Admin user for host
var adminUserForHost = _context.Users
.FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostAdminName);
if (adminUserForHost == null)
{
var user = User.CreateHostAdminUser();
user.SetNormalizedNames();
adminUserForHost = _context.Users.Add(user);
_context.SaveChanges();
}
AddUserPermission(adminUserForHost.Id, null);
// SYSTEM user for host
var systemUserForHost = _context.Users
.FirstOrDefault(u => u.TenantId == null && u.UserName == UserBase.HostSystemName);
if (systemUserForHost == null)
{
var user = User.CreateHostSystemUser();
user.SetNormalizedNames();
systemUserForHost = _context.Users.Add(user);
_context.SaveChanges();
}
AddUserPermission(systemUserForHost.Id, null);
}
private void CreateDefaultTenant()
{
var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Iwb");
if (defaultTenant == null)
{
defaultTenant = _context.Tenants.Add(new Tenant(TenantBase.DefaultTenantName, $"{TenantBase.DefaultTenantName}-租主"));
_context.SaveChanges();
}
DefaultTenantId = defaultTenant.Id;
}
private void CreateRolesAndUsers()
{
// admin role
var adminRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.Admin);
if (adminRole == null)
{
adminRole = _context.Roles
.Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.Admin, StaticRoleNames.Tenants.Admin)
{
IsStatic = true,
RoleType = UsersAndRolesTypeDefinition.Supper,
AccountType = AccountTypeDefinition.System,
});
_context.SaveChanges();
}
AddRolePermission(adminRole.Id);
// Admin user
var adminUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.AdminUserName);
if (adminUser == null)
{
adminUser = User.CreateTenantAdminUser(DefaultTenantId);
adminUser.IsEmailConfirmed = true;
adminUser.IsActive = true;
adminUser = _context.Users.Add(adminUser);
_context.SaveChanges();
}
// User Permission
AddUserPermission(adminUser.Id);
// System role
var systemRole = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == StaticRoleNames.Tenants.System);
if (systemRole == null)
{
systemRole = _context.Roles
.Add(new Role(DefaultTenantId, StaticRoleNames.Tenants.System, StaticRoleNames.Tenants.System)
{
IsStatic = true,
RoleType = UsersAndRolesTypeDefinition.Supper,
AccountType = AccountTypeDefinition.System,
});
_context.SaveChanges();
}
// Role Permission
AddRolePermission(systemRole.Id);
// System user
var systemUser = _context.Users.FirstOrDefault(u => u.TenantId == DefaultTenantId && u.UserName == UserBase.SystemUserName);
if (systemUser == null)
{
systemUser = User.CreateTenantSystemUser(DefaultTenantId);
systemUser.IsEmailConfirmed = true;
systemUser.IsActive = true;
systemUser = _context.Users.Add(systemUser);
_context.SaveChanges();
// Assign Admin role to admin user
_context.UserRoles.Add(new UserRole(DefaultTenantId, systemUser.Id, systemRole.Id));
_context.SaveChanges();
}
}
#region 添加权限
///
/// 添加用户权限
///
///
///
private void AddUserPermission(long userId, int? tenantId = 0)
{
tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
foreach (var fun in funs)
{
_context.Permissions.Add(new PermissionSetting()
{
Name = fun.PermissionName,
TenantId = tenantId,
IsGranted = true,
Master = 2,
MasterValue = userId + ""
});
}
_context.SaveChanges();
}
///
/// 添加角色权限
///
///
///
private void AddRolePermission(int roleId, int? tenantId = 0)
{
var funs = _context.SysFunctions.Where(a => a.IsDeleted == false).OrderBy(a => a.CreationTime);
tenantId = tenantId == 0 ? DefaultTenantId : tenantId;
foreach (var fun in funs)
{
_context.Permissions.Add(new PermissionSetting
{
Name = fun.PermissionName,
TenantId = tenantId,
IsGranted = true,
Master = 1,
MasterValue = roleId + ""
});
}
_context.SaveChanges();
}
#endregion
readonly List sys= new List()
{
PermissionNames.Pages,
PermissionNames.PagesCaseContractMg ,
PermissionNames.PagesCaseContractMgCaseMg,
PermissionNames.PagesCaseContractMgCaseMgQuery,
PermissionNames.PagesCaseContractMgContractMg,
PermissionNames.PagesCaseContractMgContractMgQuery,
PermissionNames.PagesCaseContractMgContractMgSetLawFirm,
PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
PermissionNames.PagesLegalLawFirmMg,
PermissionNames.PagesLegalLawFirmMgLawFirmMg,
PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery,
PermissionNames.PagesLegalLawFirmMgLawyerMg,
PermissionNames.PagesLegalLawFirmMgLawyerMgQuery,
PermissionNames.PagesClientMg,
PermissionNames.PagesClientMgCompanyMg,
PermissionNames.PagesClientMgCompanyMgQuery,
PermissionNames.PagesClientMgStaffMg,
PermissionNames.PagesClientMgStaffMgQuery,
PermissionNames.PagesBasicMg,
PermissionNames.PagesBasicMgServiceTypeMg,
PermissionNames.PagesBasicMgServiceTypeMgQuery,
PermissionNames.PagesBasicMgServiceTypeMgCreate,
PermissionNames.PagesBasicMgServiceTypeMgUpdate,
PermissionNames.PagesBasicMgServiceTypeMgDelete,
PermissionNames.PagesSystemMg,
PermissionNames.PagesSystemMgUserMg,
PermissionNames.PagesSystemMgUserMgQuery,
PermissionNames.PagesSystemMgUserMgCreate,
PermissionNames.PagesSystemMgUserMgUpdate,
PermissionNames.PagesSystemMgUserMgAuth,
PermissionNames.PagesSystemMgUserMgResetLock,
PermissionNames.PagesSystemMgHelpMg,
PermissionNames.PagesSystemMgHelpMgQuery,
PermissionNames.PagesSystemMgHelpMgCreate,
PermissionNames.PagesSystemMgHelpMgUpdate,
PermissionNames.PagesSystemMgHelpMgDelete,
PermissionNames.PagesSystemMgLogMg,
PermissionNames.PagesSystemMgLogMgQuery,
PermissionNames.PagesUserHelpInfo,
PermissionNames.PagesUserSysSetting,
PermissionNames.PagesUserSysSettingLoginImage,
PermissionNames.PagesUserSysSettingHomeImage,
PermissionNames.PagesUserSysSettingRefreshCache,
PermissionNames.PagesUserSysSettingRefreshLang,
};
readonly List company= new List()
{
PermissionNames.Pages,
PermissionNames.PagesCaseContractMg ,
PermissionNames.PagesCaseContractMgCaseMg,
PermissionNames.PagesCaseContractMgCaseMgQuery,
PermissionNames.PagesCaseContractMgCaseMgCreate,
PermissionNames.PagesCaseContractMgCaseMgUpdate,
PermissionNames.PagesCaseContractMgCaseMgDelete,
PermissionNames.PagesCaseContractMgCaseMgSetStaff,
PermissionNames.PagesCaseContractMgCaseMgChangeState,
PermissionNames.PagesCaseContractMgCaseMgNote,
PermissionNames.PagesCaseContractMgCaseMgRestart,
PermissionNames.PagesCaseContractMgContractMg,
PermissionNames.PagesCaseContractMgContractMgQuery,
PermissionNames.PagesCaseContractMgContractMgCreate,
PermissionNames.PagesCaseContractMgContractMgUpdate,
PermissionNames.PagesCaseContractMgContractMgDelete,
PermissionNames.PagesCaseContractMgContractMgSetStaff,
PermissionNames.PagesCaseContractMgContractMgChangeState,
PermissionNames.PagesCaseContractMgContractMgNote,
PermissionNames.PagesCaseContractMgContractMgSupplement,
PermissionNames.PagesCaseContractMgContractMgRestart,
PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeEvidence,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgSetOrg,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote,
PermissionNames.PagesClientMg,
PermissionNames.PagesClientMgCompanyMg,
PermissionNames.PagesClientMgCompanyMgQuery,
PermissionNames.PagesClientMgCompanyMgCreate,
PermissionNames.PagesClientMgCompanyMgUpdate,
PermissionNames.PagesClientMgCompanyMgDelete,
PermissionNames.PagesClientMgCompanyMgMasterStaff,
PermissionNames.PagesClientMgStaffMg,
PermissionNames.PagesClientMgStaffMgQuery,
PermissionNames.PagesClientMgStaffMgCreate,
PermissionNames.PagesClientMgStaffMgUpdate,
PermissionNames.PagesClientMgStaffMgDelete,
PermissionNames.PagesClientMgStaffMgBind,
PermissionNames.PagesClientMgStaffMgUnBind,
PermissionNames.PagesClientMgOrgMg,
PermissionNames.PagesClientMgOrgMgQuery,
PermissionNames.PagesClientMgOrgMgCreate,
PermissionNames.PagesClientMgOrgMgUpdate,
PermissionNames.PagesClientMgOrgMgDelete,
PermissionNames.PagesClientMgOrgMgOrgAuth,
PermissionNames.PagesSystemMg,
//PermissionNames.PagesSystemMgUserMg,
//PermissionNames.PagesSystemMgUserMgQuery,
//PermissionNames.PagesSystemMgUserMgCreate,
//PermissionNames.PagesSystemMgUserMgUpdate,
//PermissionNames.PagesSystemMgUserMgAuth,
//PermissionNames.PagesSystemMgUserMgResetLock,
PermissionNames.PagesUserHelpInfo,
PermissionNames.PagesUserSysSetting,
PermissionNames.PagesUserSysSettingLoginImage,
PermissionNames.PagesUserSysSettingHomeImage,
PermissionNames.PagesUserSysSettingRefreshCache,
PermissionNames.PagesUserSysSettingRefreshLang,
};
readonly List lawFirm= new List()
{
PermissionNames.Pages,
PermissionNames.PagesCaseContractMg ,
PermissionNames.PagesCaseContractMgCaseMg,
PermissionNames.PagesCaseContractMgCaseMgQuery,
PermissionNames.PagesCaseContractMgContractMg,
PermissionNames.PagesCaseContractMgContractMgQuery,
PermissionNames.PagesCaseContractMgContractMgNote,
PermissionNames.PagesCaseContractMgContractMgLawNote,
PermissionNames.PagesCaseContractMgContractMgSetLawyer,
PermissionNames.PagesCaseContractMgContractMgKeyPointMg,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgQuery,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgCreate,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgUpdate,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgDelete,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgChangeState,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgRestart,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgLawNote,
PermissionNames.PagesCaseContractMgContractMgKeyPointMgNote,
PermissionNames.PagesLegalLawFirmMg,
PermissionNames.PagesLegalLawFirmMgLawFirmMg,
PermissionNames.PagesLegalLawFirmMgLawFirmMgQuery,
PermissionNames.PagesLegalLawFirmMgLawFirmMgCreate,
PermissionNames.PagesLegalLawFirmMgLawFirmMgUpdate,
PermissionNames.PagesLegalLawFirmMgLawFirmMgDelete,
PermissionNames.PagesLegalLawFirmMgLawFirmMgMasterLawyer,
PermissionNames.PagesLegalLawFirmMgLawyerMg,
PermissionNames.PagesLegalLawFirmMgLawyerMgQuery,
PermissionNames.PagesLegalLawFirmMgLawyerMgCreate,
PermissionNames.PagesLegalLawFirmMgLawyerMgUpdate,
PermissionNames.PagesLegalLawFirmMgLawyerMgDelete,
PermissionNames.PagesLegalLawFirmMgLawyerMgBind,
PermissionNames.PagesLegalLawFirmMgLawyerMgUnBind,
PermissionNames.PagesLegalLawFirmMgLawOrgMg,
PermissionNames.PagesLegalLawFirmMgLawOrgMgQuery,
PermissionNames.PagesLegalLawFirmMgLawOrgMgCreate,
PermissionNames.PagesLegalLawFirmMgLawOrgMgUpdate,
PermissionNames.PagesLegalLawFirmMgLawOrgMgDelete,
PermissionNames.PagesLegalLawFirmMgLawOrgMgOrgAuth,
PermissionNames.PagesSystemMg,
//PermissionNames.PagesSystemMgUserMg,
//PermissionNames.PagesSystemMgUserMgQuery,
//PermissionNames.PagesSystemMgUserMgCreate,
//PermissionNames.PagesSystemMgUserMgUpdate,
//PermissionNames.PagesSystemMgUserMgAuth,
//PermissionNames.PagesSystemMgUserMgResetLock,
PermissionNames.PagesUserHelpInfo,
PermissionNames.PagesUserSysSetting,
PermissionNames.PagesUserSysSettingLoginImage,
PermissionNames.PagesUserSysSettingHomeImage,
PermissionNames.PagesUserSysSettingRefreshCache,
PermissionNames.PagesUserSysSettingRefreshLang,
};
private void CreateDefaultRoles()
{
CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.System"], "系统管理员默认角色",
UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.System, sys);
CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.Company"], "企业负责人默认角色",
UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Client, company);
CreateRole(ConfigurationManager.AppSettings["MasterRole.Default.LawFirm"], "律所负责人默认角色",
UsersAndRolesTypeDefinition.Advanced, AccountTypeDefinition.Lawyer, lawFirm);
}
private void CreateRole(string name,string displayName,int roleType,int accountType,List permList)
{
var role = _context.Roles.FirstOrDefault(r => r.TenantId == DefaultTenantId && r.Name == name);
if (role == null)
{
role = _context.Roles
.Add(new Role(DefaultTenantId, name, displayName)
{
IsStatic = true,
RoleType = roleType,
AccountType = accountType,
Description = displayName
});
_context.SaveChanges();
}
if (permList != null)
{
foreach (var perm in permList)
{
_context.Permissions.Add(new PermissionSetting
{
Name = perm,
TenantId = DefaultTenantId,
IsGranted = true,
Master = 1,
MasterValue = role.Id + ""
});
}
}
}
}
}