private static IEnumerable <Right> GetRightsInternal(string roleName) { roleName = PrepareRoleName(roleName); if (RightsByRole.ContainsKey(roleName)) { return(RightsByRole[roleName]); } else { return(new HashSet <Right>()); } }
/// <summary> /// Method that should be called any time Rights are changed and saved. /// </summary> public static void RefreshAllRights() { var flagType = typeof(Rights); lock (staticLockObj) { RightsByRole.Clear(); var allRoles = new HashSet <string>(System.Web.Security.Roles.GetAllRoles(), StringComparer.OrdinalIgnoreCase); foreach (var role in allRoles) { var curRole = PrepareRoleName(role); RightsByRole.Add(curRole, new HashSet <Right>()); allRoles.Add(curRole); } var adminRole = BlogConfig.AdministratorRole; var anonymousRole = BlogConfig.AnonymousRole; var editorsRole = BlogConfig.EditorsRole; foreach (var right in GetAllRights()) { // Clear the existing roles so any newly-deleted // roles are removed from the list. right.ClearRoles(); if (right.Flag != Rights.None) { right.AddRole(adminRole); } } foreach (var pair in BlogEngine.Core.Providers.BlogService.FillRights()) { // Ignore any values that are invalid. This is bound to happen // during updates if a value gets renamed or removed. if (Right.RightExists(pair.Key)) { var key = GetRightByName(pair.Key); foreach (var role in pair.Value) { var curRole = PrepareRoleName(role); // Ignore any roles that are added that don't exist. if (allRoles.Contains(curRole)) { key.AddRole(curRole); Right.RightsByRole[curRole].Add(key); } } } } // Note: To reset right/roles to the defaults, the data store can be // cleared out (delete rights.xml or clear DB table). Then these // defaults will be setup. bool defaultsAdded = false; // Check that the anonymous role is set up properly. If no rights // are found, then the defaults need to be set. if (!GetRights(anonymousRole).Any()) { List <Rights> defaultRoleRights = GetDefaultRights(anonymousRole); foreach (Rights rights in defaultRoleRights) { Right.rightsByFlag[rights].AddRole(anonymousRole); } defaultsAdded = true; } // Check that the editor role is set up properly. If no rights // are found, then the defaults need to be set. if (!GetRights(editorsRole).Any()) { List <Rights> defaultRoleRights = GetDefaultRights(editorsRole); foreach (Rights rights in defaultRoleRights) { Right.rightsByFlag[rights].AddRole(editorsRole); } defaultsAdded = true; } // This check is for autocreating the rights for the Administrator role. foreach (KeyValuePair <Rights, Right> kvp in rightsByFlag) { if (kvp.Key != Rights.None) { kvp.Value.AddRole(adminRole); // could set defaultsAdded to true if the right doesn't already // have the adminRole in it. since the admin always gets all // rights and they cannot be removed, we simply grant the admin // all rights without the need to persist that. } } if (defaultsAdded) { BlogEngine.Core.Providers.BlogService.SaveRights(); } } }