static Right() { // Initialize the various dictionaries to their starting state. var flagType = typeof(Rights); rightFlagValues = Enum.GetValues(flagType).Cast<Rights>().ToList().AsReadOnly(); var adminRole = BlogEngine.Core.BlogConfig.AdministratorRole; var allRights = new List<Right>(); // Create a Right instance for each value in the Rights enum. foreach (var flag in rightFlagValues) { Rights curFlag = (Rights)flag; var flagName = Enum.GetName(flagType, curFlag); // TODO: use Enum.GetName as key for as labels for multilingual stuff, if not available fall back on Enum.GetName var curRight = new Right(curFlag, flagName); allRights.Add(curRight); // Use the Add function so if there are multiple flags with the same // value they can be caught quickly at runtime. rightsByFlag.Add(curFlag, curRight); rightsByName.Add(flagName, curRight); } allRightInstances = allRights.AsReadOnly(); EnsureBlogInstanceDataLoaded(); Blog.Saved += (s, e) => { if (e.Action == SaveAction.Delete) { Blog blog = s as Blog; if (blog != null) { // remove deleted blog from static 'rightsByRole' if (rightsByRole != null && rightsByRole.ContainsKey(blog.Id)) rightsByRole.Remove(blog.Id); // remove deleted blog from _readOnlyRoles/_rolesWithRight from // each of the Right instances. for (int i = 0; i < allRightInstances.Count; i++) { if (allRightInstances[i]._readOnlyRoles.ContainsKey(blog.Id)) allRightInstances[i]._readOnlyRoles.Remove(blog.Id); if (allRightInstances[i]._rolesWithRight.ContainsKey(blog.Id)) allRightInstances[i]._rolesWithRight.Remove(blog.Id); } } } }; }
static Right() { // Initialize the various dictionaries to their starting state. var flagType = typeof(Rights); rightFlagValues = Enum.GetValues(flagType).Cast<Rights>().ToList().AsReadOnly(); var adminRole = BlogEngine.Core.BlogSettings.Instance.AdministratorRole; var allRights = new List<Right>(); // Create a Right instance for each value in the Rights enum. foreach (var flag in rightFlagValues) { Rights curFlag = (Rights)flag; var flagName = Enum.GetName(flagType, curFlag); var curRight = new Right(curFlag, flagName); allRights.Add(curRight); // Use the Add function so if there are multiple flags with the same // value they can be caught quickly at runtime. rightsByFlag.Add(curFlag, curRight); rightsByName.Add(flagName, curRight); // This check is for autocreating the rights for the Administrator role. if (curFlag != Rights.None) { curRight.AddRole(adminRole); } } allRightInstances = allRights.AsReadOnly(); // Make sure the Administrator role exists with the Role provider. if (!System.Web.Security.Roles.RoleExists(BlogSettings.Instance.AdministratorRole)) { System.Web.Security.Roles.CreateRole(BlogSettings.Instance.AdministratorRole); // if no one is in the admin role, and there is a user named "admin", add that user // to the role. if (System.Web.Security.Roles.GetUsersInRole(BlogSettings.Instance.AdministratorRole).Length == 0) { System.Web.Security.MembershipUser membershipUser = System.Web.Security.Membership.GetUser("Admin"); if (membershipUser != null) { System.Web.Security.Roles.AddUsersToRoles(new string[] { membershipUser.UserName }, new string[] { BlogSettings.Instance.AdministratorRole }); } } } // Make sure the Anonymous role exists with the Role provider. if (!System.Web.Security.Roles.RoleExists(BlogSettings.Instance.AnonymousRole)) { // Users shouldn't actually be in the anonymous role, since the role is specifically for people who aren't users. System.Web.Security.Roles.CreateRole(BlogSettings.Instance.AnonymousRole); } // Make sure the Editors role exists with the Role provider. if (!System.Web.Security.Roles.RoleExists(BlogSettings.Instance.EditorsRole)) { System.Web.Security.Roles.CreateRole(BlogSettings.Instance.EditorsRole); } RefreshAllRights(); }
/// <summary> /// Returns whether or not the current user has the passed in Right. /// </summary> /// <param name="right"></param> /// <returns></returns> public static bool IsAuthorizedTo(Rights right) { return(Right.HasRight(right, Security.GetCurrentUserRoles())); }
/// <summary> /// Returns an IEnumerable of Rights that belong to the ecurrent user. /// </summary> /// <returns></returns> public static IEnumerable <Right> CurrentUserRights() { return(Right.GetRights(Security.GetCurrentUserRoles())); }