/// <summary> /// Saves data of edited user from TextBoxes into DB. /// </summary> protected void btnOk_Click(object sender, EventArgs e) { UserPrivilegeLevelEnum privilegeLevel = (UserPrivilegeLevelEnum)drpPrivilege.Value.ToInteger(0); // Check "modify" permission if (!CurrentUser.IsAuthorizedPerResource("CMS.Users", "Modify")) { RedirectToAccessDenied("CMS.Users", "Modify"); } string result = ValidateGlobalAndDeskAdmin(userId); var isExternal = chkIsExternal.Checked; // Find whether user name is valid (external users are not checked as their user names can contain various special characters) if (result == String.Empty) { if (!isExternal && !ucUserName.IsValid()) { result = ucUserName.ValidationError; } } String userName = ValidationHelper.GetString(ucUserName.Value, String.Empty); // Store the old display name var oldDisplayName = ui.Generalized.ObjectDisplayName; if ((result == String.Empty) && (ui != null)) { // If site prefixed allowed - ad site prefix if ((SiteID != 0) && UserInfoProvider.UserNameSitePrefixEnabled(SiteContext.CurrentSiteName)) { if (!UserInfoProvider.IsSitePrefixedUser(userName)) { userName = UserInfoProvider.EnsureSitePrefixUserName(userName, SiteContext.CurrentSite); } } // Validation for site prefixed users if (!UserInfoProvider.IsUserNamePrefixUnique(userName, ui.UserID)) { ShowError(GetString("Administration-User_New.siteprefixeduserexists")); return; } // Ensure same password password = ui.GetValue("UserPassword").ToString(); // Test for unique username UserInfo uiTest = UserInfoProvider.GetUserInfo(userName); if ((uiTest == null) || (uiTest.UserID == userId)) { if (ui == null) { ui = new UserInfo(); } bool globAdmin = ui.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin); bool editor = ui.SiteIndependentPrivilegeLevel == UserPrivilegeLevelEnum.Editor; // Email format validation if (!txtEmail.IsValid()) { ShowError(GetString("Administration-User_New.WrongEmailFormat")); return; } bool oldGlobal = ui.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin); bool oldEditor = ui.SiteIndependentPrivilegeLevel == UserPrivilegeLevelEnum.Editor; // Define domain variable string domains = null; // Get all user sites var userSites = UserInfoProvider.GetUserSites(userId).Column("SiteDomainName"); if (userSites.Count > 0) { foreach (var userSite in userSites) { domains += ValidationHelper.GetString(userSite["SiteDomainName"], string.Empty) + ";"; } // Remove ";" at the end if (domains != null) { domains = domains.Remove(domains.Length - 1); } } else { DataSet siteDs = SiteInfoProvider.GetSites().Columns("SiteDomainName"); if (!DataHelper.DataSourceIsEmpty(siteDs)) { // Create list of available site domains domains = TextHelper.Join(";", DataHelper.GetStringValues(siteDs.Tables[0], "SiteDomainName")); } } // Check limitations for Global administrator if (CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin) && ((privilegeLevel == UserPrivilegeLevelEnum.GlobalAdmin) || (privilegeLevel == UserPrivilegeLevelEnum.Admin)) && !oldGlobal) { if (!UserInfoProvider.LicenseVersionCheck(domains, FeatureEnum.Administrators, ObjectActionEnum.Insert, globAdmin)) { ShowError(GetString("License.MaxItemsReachedGlobal")); return; } } // Check limitations for editors if ((privilegeLevel == UserPrivilegeLevelEnum.Editor) && !oldEditor && userSites.Count > 0) { if (!UserInfoProvider.LicenseVersionCheck(domains, FeatureEnum.Editors, ObjectActionEnum.Insert, editor)) { ShowError(GetString("License.MaxItemsReachedEditor")); return; } } // Check whether email is unique if it is required string email = txtEmail.Text.Trim(); if (!UserInfoProvider.IsEmailUnique(email, ui)) { ShowError(GetString("UserInfo.EmailAlreadyExist")); return; } // Set properties ui.Email = email; ui.FirstName = txtFirstName.Text.Trim(); ui.FullName = txtFullName.Text.Trim(); ui.LastName = txtLastName.Text.Trim(); ui.MiddleName = txtMiddleName.Text.Trim(); ui.UserName = userName; UserInfoProvider.SetEnabled(ui, CheckBoxEnabled.Checked); ui.UserIsHidden = chkIsHidden.Checked; ui.IsExternal = isExternal; ui.UserIsDomain = chkIsDomain.Checked; ui.SetValue("UserPassword", password); ui.UserID = userId; ui.UserStartingAliasPath = txtUserStartingPath.Text.Trim(); ui.UserMFRequired = chkIsMFRequired.Checked; var isCurrentUserGlobalAdmin = CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin); // Global admin can set anything if (isCurrentUserGlobalAdmin // Other users can set only editor and non privileges || ((privilegeLevel != UserPrivilegeLevelEnum.Admin) && (privilegeLevel != UserPrivilegeLevelEnum.GlobalAdmin)) // Admin can manage his own privilege || ((privilegeLevel == UserPrivilegeLevelEnum.Admin) && (CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin) && (CurrentUser.UserID == ui.UserID)))) { ui.SiteIndependentPrivilegeLevel = privilegeLevel; } LoadUserLogon(ui); // Set values of cultures. string culture = ValidationHelper.GetString(cultureSelector.Value, ""); ui.PreferredCultureCode = culture; if (lstUICulture.SelectedValue == "0") { ui.PreferredUICultureCode = ""; } else { // Set preferred UI culture CultureInfo ci = CultureInfoProvider.GetCultureInfo(ValidationHelper.GetInteger(lstUICulture.SelectedValue, 0)); ui.PreferredUICultureCode = ci.CultureCode; } // Refresh page breadcrumbs if display name changed if (ui.Generalized.ObjectDisplayName != oldDisplayName) { ScriptHelper.RefreshTabHeader(Page, ui.FullName); } using (CMSActionContext context = new CMSActionContext()) { // Check whether the username of the currently logged user has been changed if (CurrentUserChangedUserName()) { // Ensure that an update search task will be created but NOT executed when updating the user context.EnableSmartSearchIndexer = false; } try { using (var transaction = new CMSLateBoundTransaction()) { // Update the user UserInfoProvider.SetUserInfo(ui); if (isCurrentUserGlobalAdmin) { UserMacroIdentityHelper.SetMacroIdentity(ui, drpMacroIdentity.Value.ToInteger(0)); } transaction.Commit(); } } catch (Exception ex) { EventLogProvider.LogException("Users", "SAVE", ex); ShowError(GetString("general.errorsaving")); return; } // Check whether the username of the currently logged user has been changed if (CurrentUserChangedUserName()) { // Ensure that current user is not logged out if he changes his user name if (AuthenticationMode.IsFormsAuthentication()) { FormsAuthentication.SetAuthCookie(ui.UserName, false); // Update current user MembershipContext.AuthenticatedUser = new CurrentUserInfo(ui, true); // Reset current user CurrentUser = null; } } } ShowChangesSaved(); } else { // If user exists ShowError(GetString("Administration-User_New.UserExists")); } } else { ShowError(result); } if ((ui.UserInvalidLogOnAttempts == 0) && (ui.UserAccountLockReason != UserAccountLockCode.FromEnum(UserAccountLockEnum.MaximumInvalidLogonAttemptsReached))) { btnResetLogonAttempts.Enabled = false; } LoadPasswordExpiration(ui); }
/// <summary> /// Saves new user's data into DB. /// </summary> /// <returns>Returns ID of created user</returns> protected int SaveNewUser() { UserInfo ui = new UserInfo(); // Load default values FormHelper.LoadDefaultValues("cms.user", ui); string emailAddress = txtEmailAddress.Text.Trim(); ui.PreferredCultureCode = ""; ui.Email = emailAddress; ui.FirstName = ""; ui.FullName = txtFullName.Text; ui.LastName = ""; ui.MiddleName = ""; ui.UserName = userName; ui.Enabled = chkEnabled.Checked; ui.IsExternal = false; // Set privilege level, global admin may set all levels, rest only editor UserPrivilegeLevelEnum privilegeLevel = (UserPrivilegeLevelEnum)drpPrivilegeLevel.Value.ToInteger(0); var isCurrentUserGlobalAdmin = CurrentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin); if (isCurrentUserGlobalAdmin || (privilegeLevel == UserPrivilegeLevelEnum.None) || (privilegeLevel == UserPrivilegeLevelEnum.Editor)) { ui.SiteIndependentPrivilegeLevel = privilegeLevel; } bool assignUserToSite = chkAssignToSite.Checked && AllowAssignToWebsite; // Check license limitations if (SiteID > 0 || assignUserToSite) { string errorMessage = String.Empty; UserInfoProvider.CheckLicenseLimitation(ui, ref errorMessage); if (!String.IsNullOrEmpty(errorMessage)) { ShowError(errorMessage); } } // Check whether email is unique if it is required string siteName = SiteName; if (assignUserToSite) { siteName = SiteContext.CurrentSiteName; } if (!UserInfoProvider.IsEmailUnique(emailAddress, siteName, 0)) { ShowError(GetString("UserInfo.EmailAlreadyExist")); return(-1); } if (!error) { using (var transaction = new CMSLateBoundTransaction()) { // Set password and save object UserInfoProvider.SetPassword(ui, passStrength.Text); if (isCurrentUserGlobalAdmin) { UserMacroIdentityHelper.SetMacroIdentity(ui, drpMacroIdentity.Value.ToInteger(0)); } // Add user to current site if ((SiteID > 0) || assignUserToSite) { UserInfoProvider.AddUserToSite(ui.UserName, siteName); } transaction.Commit(); } return(ui.UserID); } return(-1); }