protected virtual void DeserializeRole(IRoleData role) { bool addedRole = false; // Add role if needed var name = role.RoleName; if (!System.Web.Security.Roles.RoleExists(name)) { _loaderLogger.AddedNewRole(role); addedRole = true; System.Web.Security.Roles.CreateRole(name); } Role targetRole = Role.FromName(name); var currentSourceParents = new SitecoreRoleData(targetRole).MemberOfRoles; var currentTargetParents = role.MemberOfRoles; var addedRoleMembership = new List <string>(); var removedRoleMembership = new List <string>(); var deferredUpdateLog = new DeferredLogWriter <IRoleLoaderLogger>(); // Loop over the serialized parent roles and set db roles if needed foreach (var serializedMemberRoleName in currentTargetParents) { var memberRole = Role.FromName(serializedMemberRoleName); // add nonexistant parent role if needed. NOTE: parent role need not be one we have serialized or included. if (!Role.Exists(serializedMemberRoleName)) { deferredUpdateLog.AddEntry(log => log.AddedNewRoleMembership(new SitecoreRoleData(memberRole))); System.Web.Security.Roles.CreateRole(serializedMemberRoleName); } // Add membership if not already in the parent role if (!RolesInRolesManager.IsRoleInRole(targetRole, memberRole, false)) { addedRoleMembership.Add(memberRole.Name); RolesInRolesManager.AddRoleToRole(targetRole, memberRole); } } // Loop over parent roles that exist in the database but not in serialized and remove them var membershipToRemove = currentSourceParents.Where(parent => !currentTargetParents.Contains(parent, StringComparer.OrdinalIgnoreCase)); foreach (var roleToRemove in membershipToRemove) { removedRoleMembership.Add(roleToRemove); RolesInRolesManager.RemoveRoleFromRole(targetRole, Role.FromName(roleToRemove)); } if (!addedRole && (addedRoleMembership.Count > 0 || removedRoleMembership.Count > 0)) { _loaderLogger.RoleMembershipChanged(role, addedRoleMembership.ToArray(), removedRoleMembership.ToArray()); } deferredUpdateLog.ExecuteDeferredActions(_loaderLogger); }
protected override void ProcessRecord() { var name = Identity.Name; if (Role.Exists(name)) { var targetRole = Role.FromName(name); foreach (var member in Members) { if (User.Exists(member.Name)) { var user = User.FromName(member.Name, false); if (user.IsInRole(targetRole)) { continue; } if (!ShouldProcess(targetRole.Name, $"Add user '{user.Name}' to role")) { continue; } var profile = UserRoles.FromUser(user); profile.Add(targetRole); } else if (Role.Exists(member.Name)) { var role = Role.FromName(member.Name); if (RolesInRolesManager.IsRoleInRole(role, targetRole, false)) { continue; } if (ShouldProcess(targetRole.Name, $"Add role '{role.Name}' to role")) { RolesInRolesManager.AddRoleToRole(role, targetRole); } } else { WriteError(typeof(ObjectNotFoundException), $"Cannot find an account with identity '{member}'.", ErrorIds.AccountNotFound, ErrorCategory.ObjectNotFound, member); } } } else { WriteError(typeof(ObjectNotFoundException), $"Cannot find an account with identity '{name}'.", ErrorIds.AccountNotFound, ErrorCategory.ObjectNotFound, Identity); } }
protected override void ProcessRecord() { if (!this.CanFindAccount(Identity, AccountType.Role)) { return; } var name = Identity.Name; var targetRole = Role.FromName(name); foreach (var member in Members) { if (User.Exists(member.Name)) { var user = User.FromName(member.Name, false); if (!user.IsInRole(targetRole)) { continue; } var profile = UserRoles.FromUser(user); if (ShouldProcess(targetRole.Name, $"Remove user '{user.Name}' from role")) { profile.Remove(targetRole); } } else if (Role.Exists(member.Name)) { var role = Role.FromName(member.Name); if (!RolesInRolesManager.IsRoleInRole(role, targetRole, false)) { continue; } if (ShouldProcess(targetRole.Name, $"Remove role '{role.Name}' from role")) { RolesInRolesManager.RemoveRoleFromRole(role, targetRole); } } else { WriteError(typeof(ObjectNotFoundException), $"Cannot find an account with identity '{member}'.", ErrorIds.AccountNotFound, ErrorCategory.ObjectNotFound, member); } } }
private static void CreateRolInRols(List <string> rols) { foreach (var line in rols) { var splitted = line.Split(','); if (splitted.Length == 3 && splitted[0] == "role") { var rol = Sitecore.Security.Accounts.Role.FromName(splitted[1]); foreach (var subrolstring in splitted[2].Split('|')) { var subrol = Sitecore.Security.Accounts.Role.FromName(subrolstring); if (rol != null && subrol != null) { if (RolesInRolesManager.RolesInRolesSupported && !RolesInRolesManager.IsRoleInRole(subrol, rol, false)) { RolesInRolesManager.AddRoleToRole(subrol, rol); } } } } } }