private async Task <int> CreateTestTenantAndTestUser() { var testTenant = new Tenant("Test", "test") { ConnectionString = SimpleStringCipher.Instance.Encrypt("Server=localhost; Database=DOTICTest_" + Guid.NewGuid().ToString("N") + "; Trusted_Connection=True;") }; await _tenantManager.CreateAsync(testTenant); using (var uow = _unitOfWorkManager.Begin()) { using (_unitOfWorkManager.Current.SetTenantId(testTenant.Id)) { var testUser = new User { EmailAddress = "*****@*****.**", IsEmailConfirmed = true, Name = "Test", Surname = "User", UserName = "******", Password = "******", //123qwe TenantId = testTenant.Id, }; await _userManager.CreateAsync(testUser); UsingDbContext(null, context => { context.UserAccounts.Add(new UserAccount { TenantId = testUser.TenantId, UserId = testUser.Id, UserName = testUser.UserName, EmailAddress = testUser.EmailAddress }); }); } await uow.CompleteAsync(); return(testTenant.Id); } }
/// <summary> /// 创建租户 /// </summary> public async Task CreateTenant(CreateTenantInput input) { //Create tenant var tenant = input.MapTo <SysTenant>(); tenant.ConnectionString = null; //所有租户共享数据库 //SimpleStringCipher.Instance.Encrypt(input.ConnectionString) var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName); if (defaultEdition != null) { tenant.EditionId = defaultEdition.Id; } CheckErrors(await TenantManager.CreateAsync(tenant)); await CurrentUnitOfWork.SaveChangesAsync(); //To get new tenant's id. //Create tenant database //_abpZeroDbMigrator.CreateOrMigrateForTenant(tenant); //We are working entities of new tenant, so changing tenant filter using (CurrentUnitOfWork.SetTenantId(tenant.Id)) { //Create static roles for new tenant CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id)); await CurrentUnitOfWork.SaveChangesAsync(); //To get static role ids //grant all permissions to admin role var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin); await _roleManager.GrantAllPermissionsAsync(adminRole); //Create admin user for the tenant var adminUser = SysUser.CreateTenantAdminUser(tenant.Id, input.AdminEmailAddress, SysUser.DefaultPassword); CheckErrors(await UserManager.CreateAsync(adminUser)); await CurrentUnitOfWork.SaveChangesAsync(); //To get admin user's id //Assign admin user to role! CheckErrors(await UserManager.AddToRoleAsync(adminUser.Id, adminRole.Name)); await CurrentUnitOfWork.SaveChangesAsync(); } }
/// <summary> /// The create tenant. /// </summary> /// <param name="input"> /// The input. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task CreateTenant(CreateTenantInput input) { //Create tenant var tenant = new Tenant(input.TenancyName, input.Name); var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName); if (defaultEdition != null) { tenant.EditionId = defaultEdition.Id; } await TenantManager.CreateAsync(tenant); await CurrentUnitOfWork.SaveChangesAsync(); //To get new tenant's id. //We are working entities of new tenant, so changing tenant filter using (CurrentUnitOfWork.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, tenant.Id)) { //Create static roles for new tenant CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id)); await CurrentUnitOfWork.SaveChangesAsync(); //To get static role ids //grant all permissions to admin role var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin); await _roleManager.GrantAllPermissionsAsync(adminRole); //Create admin user for the tenant var adminUser = User.CreateTenantAdminUser(tenant.Id, input.AdminEmailAddress, User.DefaultPassword); CheckErrors(await UserManager.CreateAsync(adminUser)); await CurrentUnitOfWork.SaveChangesAsync(); //To get admin user's id //Assign admin user to role! CheckErrors(await UserManager.AddToRoleAsync(adminUser.Id, adminRole.Name)); await CurrentUnitOfWork.SaveChangesAsync(); } }
private async Task CreateTestStaticRoles() { _roleManagementConfig.StaticRoles.Add( new StaticRoleDefinition( "admin", MultiTenancySides.Tenant, grantAllPermissionsByDefault: true) ); _roleManagementConfig.StaticRoles.Add( new StaticRoleDefinition( "supporter", MultiTenancySides.Tenant) { GrantedPermissions = { "Permission1", "Permission2" } } ); using (var uow = _unitOfWorkManager.Begin()) { var tenant = new Tenant("Tenant1", "Tenant1"); await _tenantManager.CreateAsync(tenant); await _unitOfWorkManager.Current.SaveChangesAsync(); using (_unitOfWorkManager.Current.SetTenantId(tenant.Id)) { AbpSession.TenantId = tenant.Id; await RoleManager.CreateStaticRoles(tenant.Id); await _unitOfWorkManager.Current.SaveChangesAsync(); } await uow.CompleteAsync(); } }
public async Task <RegisterTenantResult> Create(RegisterTenantInput input, CancellationToken ct) { using (DataFilter.Disable <IMultiTenant>()) { var existsTenant = await TenantRepository.FindByNameAsync(input.Name, false, ct); if (existsTenant != null) { throw new BusinessException(ScoringDomainErrorCodes.TenantAlreadyExists) .WithData("name", input.Name); } } // Create tenant var tenant = await TenantManager.CreateAsync(input.Name); tenant = await TenantRepository.InsertAsync(tenant, true, ct); IdentityUser adminIdentity; using (CurrentTenant.Change(tenant.Id)) { await DataSeeder.SeedAsync( new DataSeedContext(tenant.Id) .WithProperty("AdminEmail", input.AdminEmailAddress) .WithProperty("AdminPassword", input.AdminPassword) ); adminIdentity = await UserManager.FindByEmailAsync(input.AdminEmailAddress); } var adminTokenDto = new RegisterAdminTokenDto(await AuthJwtProvider.GenerateJwt(adminIdentity, ct)); var tenantDto = ObjectMapper.Map <Tenant, TenantDto>(tenant); return(new RegisterTenantResult(adminTokenDto, tenantDto)); }
public virtual async Task <ActionResult> RegisterTenant(RegisterTenantViewModel model) { try { CheckModelState(); //Create tenant var tenant = new Tenant { TenancyName = model.TenancyName, Name = model.TenancyName }; CheckErrors(await _tenantManager.CreateAsync(tenant)); await _unitOfWorkManager.Current.SaveChangesAsync(); //To get new tenant's id. //We are working entities of new tenant, so changing tenant filter using (_unitOfWorkManager.Current.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, tenant.Id)) { //Create static roles for new tenant CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id)); await _unitOfWorkManager.Current.SaveChangesAsync(); //To get static role ids //grant all permissions to admin role var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenant.Admin); await _roleManager.GrantAllPermissionsAsync(adminRole); //Member role should be default var memberRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenant.Member); memberRole.IsDefault = true; CheckErrors(await _roleManager.UpdateAsync(memberRole)); //Create admin user for the tenant var adminUser = Users.User.CreateTenantAdminUser(tenant.Id, model.EmailAddress, model.Password); CheckErrors(await _userManager.CreateAsync(adminUser)); await _unitOfWorkManager.Current.SaveChangesAsync(); //To get admin user's id //Assign admin user to role! CheckErrors(await _userManager.AddToRoleAsync(adminUser.Id, adminRole.Name)); await _unitOfWorkManager.Current.SaveChangesAsync(); //Login! var loginResult = await GetLoginResultAsync(model.EmailAddress, model.Password, tenant.TenancyName); if (loginResult.Result == AbpLoginResultType.Success) { await SignInAsync(loginResult.User, loginResult.Identity); return(Redirect(Url.Action("Index", "Home"))); } } return(RedirectToAction("Index", "Home")); } catch (UserFriendlyException ex) { ViewBag.ErrorMessage = ex.Message; return(View("RegisterTenant", model)); } }
private async Task <TenantDto> CreateNewTenand(RegisterInput input) { try { // Create tenant var tenant = new Tenant { IsActive = true, TenancyName = NormalizeTenantName(input.Name, input.Surname, input.EmailAddress), Name = input.Name + " " + input.Surname, }; tenant.ConnectionString = null; var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName); if (defaultEdition != null) { tenant.EditionId = defaultEdition.Id; } await _tenantManager.CreateAsync(tenant); await CurrentUnitOfWork.SaveChangesAsync(); // To get new tenant's id. // Create tenant database _abpZeroDbMigrator.CreateOrMigrateForTenant(tenant); // We are working entities of new tenant, so changing tenant filter using (CurrentUnitOfWork.SetTenantId(tenant.Id)) { //Init tenant data _tenantManager.InitializeTenantData(); // Create static roles for new tenant CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id)); await CurrentUnitOfWork.SaveChangesAsync(); // To get static role ids // Grant all permissions to admin role var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin); await _roleManager.GrantAllPermissionsAsync(adminRole); // Create admin user for the tenant var adminUser = User.CreateTenantUser(tenant.Id, input.UserName, input.Name, input.Surname, input.EmailAddress); await _userManager.InitializeOptionsAsync(tenant.Id); CheckErrors(await _userManager.CreateAsync(adminUser, input.Password)); await CurrentUnitOfWork.SaveChangesAsync(); // To get admin user's id // Assign admin user to role! CheckErrors(await _userManager.AddToRoleAsync(adminUser, adminRole.Name)); await CurrentUnitOfWork.SaveChangesAsync(); } return(_objectMapper.Map <TenantDto>(tenant)); } catch (Exception ex) { Logger.Error(ex.Message, ex); throw; } }