コード例 #1
0
        public async Task <IActionResult> RegisterTenant(RegisterTenantViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }
            if (model.BetaAccessKey != _betaAccessHelper.BetaAccessKey)
            {
                return(UnsuccessfulTenantCreation(CreateTenantResult.InvalidBetaAccessKey));
            }

            var tenantProvider = HttpContext.GetService <TenantProvider>();
            var result         = await tenantProvider.CreateTenantAsync(new CreateTenantParameters
            {
                OrganizationName   = model.OrganizationName,
                OrganizationDomain = model.OrganizationDomain
            });

            if (result != CreateTenantResult.TenantCreated)
            {
                return(UnsuccessfulTenantCreation(result));
            }
            UserManager.CreateAccount(model.OrganizationDomain, model.Email, model.Password, model.Email, null, null, null, new List <Claim>
            {
                new Claim(AuthorizationPolicies.AppOwner, "true")
            });

            return(TenantRedirectHelper.RedirectToTenantDomain(model.OrganizationDomain, "Login", HttpContext.Request, Url));
        }
コード例 #2
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));
            }
        }