Example #1
0
        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);
            }
        }
Example #2
0
        /// <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();
            }
        }
Example #3
0
        /// <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));
        }
Example #6
0
        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;
            }
        }