using System; using System.Threading.Tasks; using Sozsoft.Platform.Extensions; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using Volo.Abp; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; using IdentityRole = Volo.Abp.Identity.IdentityRole; using IdentityUser = Volo.Abp.Identity.IdentityUser; using Volo.Abp.Domain.Repositories; using Sozsoft.Platform.Entities; namespace Sozsoft.Platform.Data.Seeds; [Dependency(ReplaceServices = true)] public class PlatformIdentityDataSeeder : IdentityDataSeeder { private readonly IPermissionGrantRepository permissionGrantRepository; private readonly IRepository _branchRepository; private readonly IRepository _branchUsersRepository; public PlatformIdentityDataSeeder( IGuidGenerator guidGenerator, IIdentityRoleRepository roleRepository, IIdentityUserRepository userRepository, IRepository branchRepository, IRepository branchUsersRepository, ILookupNormalizer lookupNormalizer, IdentityUserManager userManager, IdentityRoleManager roleManager, IPermissionGrantRepository permissionGrantRepository, ICurrentTenant currentTenant, IOptions identityOptions ) : base(guidGenerator, roleRepository, userRepository, lookupNormalizer, userManager, roleManager, currentTenant, identityOptions) { this.permissionGrantRepository = permissionGrantRepository; this._branchRepository = branchRepository; this._branchUsersRepository = branchUsersRepository; } public override async Task SeedAsync(string adminEmail, string adminPassword, Guid? tenantId = null, string adminUserName = null) { Check.NotNullOrWhiteSpace(adminEmail, nameof(adminEmail)); Check.NotNullOrWhiteSpace(adminPassword, nameof(adminPassword)); using (CurrentTenant.Change(tenantId)) { await IdentityOptions.SetAsync(); var result = new IdentityDataSeedResult(); var branchId = GuidGenerator.Create(); var defaultBranch = await _branchRepository.FirstOrDefaultAsync(b => b.Code == PlatformConsts.Branches.BranchCode); if (defaultBranch == null) { await _branchRepository.InsertAsync(new Branch(branchId) { Code = PlatformConsts.Branches.BranchCode, Name = PlatformConsts.Branches.BranchName, VknTckn = PlatformConsts.Branches.BranchVknTckn, TaxOffice = PlatformConsts.Branches.BranchTaxOffice, MobileNumber = PlatformConsts.Branches.BranchMobileNumber, Country = PlatformConsts.Branches.BranchCountry, City = PlatformConsts.Branches.BranchCity, District = PlatformConsts.Branches.BranchDistrict, Township = PlatformConsts.Branches.BranchTownship, Email = PlatformConsts.Branches.BranchEmail, Website = PlatformConsts.Branches.BranchWebsite, IsActive = PlatformConsts.Branches.BranchIsActive, TenantId = tenantId, }); } var adminRole = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(PlatformConsts.AbpIdentity.User.AdminRoleName)); if (adminRole is null) { var roleId = GuidGenerator.Create(); adminRole = new IdentityRole( roleId, PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId ) { IsStatic = true, IsPublic = true }; (await RoleManager.CreateAsync(adminRole)).CheckErrors(); result.CreatedAdminRole = true; } adminUserName ??= PlatformConsts.AbpIdentity.User.AdminEmailDefaultValue; var adminUser = await UserRepository.FindByNormalizedUserNameAsync( LookupNormalizer.NormalizeName(adminUserName) ); if (adminUser is null) { var userId = GuidGenerator.Create(); adminUser = new IdentityUser( userId, adminUserName, adminEmail, tenantId ) { Name = PlatformConsts.AbpIdentity.User.AdminNameDefaultValue, Surname = PlatformConsts.AbpIdentity.User.AdminSurNameDefaultValue, }; adminUser.SetEmailConfirmed(true); adminUser.SetIsVerified(true); adminUser.SetRocketUsername(PlatformConsts.AbpIdentity.User.AdminRocketUsernameDefaultValue); adminUser.SetPhoneNumber(PlatformConsts.AbpIdentity.User.AdminPhoneNumberDefaultValue, true); adminUser.SetWorkHour(PlatformConsts.AbpIdentity.User.AdminWorkHourDefaultValue); (await UserManager.CreateAsync(adminUser, adminPassword, validatePassword: false)).CheckErrors(); result.CreatedAdminUser = true; (await UserManager.AddToRoleAsync(adminUser, PlatformConsts.AbpIdentity.User.AdminRoleName)).CheckErrors(); //BranchUsers tablosuna admin kullanıcısı ekleniyor var defaultBranchUsers = await _branchUsersRepository.FirstOrDefaultAsync(bu => bu.UserId == userId && bu.BranchId == branchId); if (defaultBranchUsers is null) { await _branchUsersRepository.InsertAsync(new BranchUsers { BranchId = branchId, UserId = userId, TenantId = tenantId }); } } /*admin rolüne ait yetkiler otomatik atanıyor*/ var permissions = await permissionGrantRepository.GetListAsync("R", PlatformConsts.AbpIdentity.User.AdminRoleName); if (permissions.Count == 0) { await permissionGrantRepository.InsertManyAsync( [ new(Guid.NewGuid(), IdentityPermissions.Roles.Default, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Create, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Delete, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Update, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.Default + ".Export", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Roles.ManagePermissions, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Default, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Create, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Delete, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Update, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.ManagePermissions, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.Default + ".Export", "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.Users.ManageRoles, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), new(Guid.NewGuid(), IdentityPermissions.UserLookup.Default, "R", PlatformConsts.AbpIdentity.User.AdminRoleName, tenantId), ]); } return result; } } }