コード例 #1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            {
                int?tenantId = null;

                if (Input.SelectedTenantId != null)
                {
                    tenantId = Input.SelectedTenantId;

                    Input.IsAdmin = false;
                }

                var user = new IzendaUser
                {
                    UserName = Input.UserID,
                    Email    = Input.UserID,
                    TenantId = tenantId,
                };

                var result = await _userManager.CreateAsync(user);                                                  // Save new user into client DB

                if (result.Succeeded)                                                                               // if successful, then start creating a user at Izenda DB
                {
                    var assignedRole = !string.IsNullOrEmpty(Input.SelectedRole) ? Input.SelectedRole : "Employee"; // set default role if required. As an example, Employee is set by default

                    var isRoleExisting = _roleManager.FindByNameAsync(assignedRole);                                // check assigned role exist in client DB. if not, assigned role is null

                    if (isRoleExisting == null)
                    {
                        try
                        {
                            await _roleManager.CreateAsync(new Microsoft.AspNetCore.Identity.IdentityRole(assignedRole));

                            result = await _userManager.AddToRoleAsync(user, assignedRole);
                        }
                        catch (Exception e)
                        {
                            Debug.WriteLine(e);
                        }
                    }
                    else
                    {
                        result = await _userManager.AddToRoleAsync(user, assignedRole);
                    }

                    if (result.Succeeded)
                    {
                        var izendaAdminAuthToken = IzendaTokenAuthorization.GetIzendaAdminToken();
                        user.Tenant = _tenantManager.GetTenantById(Input.SelectedTenantId); // set client DB application user's tenant
                        var tenantName = user.Tenant?.Name ?? null;

                        // Create a new user at Izenda DB
                        var success = await IzendaUtilities.CreateIzendaUser(
                            tenantName,
                            Input.UserID,
                            Input.LastName,
                            Input.FirstName,
                            Input.IsAdmin,
                            assignedRole,
                            izendaAdminAuthToken);

                        if (success)
                        {
                            return(LocalRedirect(returnUrl));
                        }
                    }
                    ModelState.AddModelError(string.Empty, "Failed to create a new user. User already exists in DB.");
                    return(Page());
                }
            }
            ModelState.AddModelError(string.Empty, "Failed to create a new user. Invalid model.");
            return(Page());
        }
コード例 #2
0
ファイル: Register.cshtml.cs プロジェクト: manan11388/docs
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var tenant = await HandleTenant(Input.Tenant);

                var roleName = IsSystemTenant(tenant.Name) ? "Administrator" : "Manager";

                var user = new IzendaUser {
                    Tenant_Id = tenant.Id, UserName = Input.Email, Email = Input.Email
                };
                var result = await userManager.CreateAsync(user, Input.Password);

                await userManager.AddToRoleAsync(user, roleName);

                if (result.Succeeded)
                {
                    logger.LogInformation("User created a new account with password.");
                    //determine tenant
                    Tenants izendaTenant = null;
                    if (!IsSystemTenant(tenant.Name))
                    {
                        izendaTenant         = new Tenants();
                        izendaTenant.Active  = true;
                        izendaTenant.Deleted = false;

                        izendaTenant.Name     = tenant.Name;
                        izendaTenant.TenantID = tenant.Name;
                        TenantIntegrationConfig.AddOrUpdateTenant(izendaTenant);
                    }

                    //determine roles
                    var roleDetail = new RoleDetail()
                    {
                        Name             = roleName,
                        TenantUniqueName = tenant.Name,
                        Active           = true,
                        Permission       = new Izenda.BI.Framework.Models.Permissions.Permission(),
                    };

                    var izendaUser = new UserDetail()
                    {
                        UserName        = user.Email,
                        EmailAddress    = user.Email,
                        FirstName       = "John", //todo fix this
                        LastName        = "Doe",
                        TenantDisplayId = izendaTenant?.Name,
                        SystemAdmin     = IsSystemTenant(tenant.Name),
                        Deleted         = false,
                        Active          = true,
                        Roles           = new List <Role>()
                    };

                    izendaUser.Roles.Add(new Role()
                    {
                        Name = roleDetail.Name
                    });

                    RoleIntegrationConfig.AddOrUpdateRole(roleDetail);
                    UserIntegrationConfig.AddOrUpdateUser(izendaUser);

                    await signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }