//删除权限 public JsonResult DeleteRight(int id) { SysPermission deleteRight = AllPermissions.First(p => p.PermissionId == id); if (deleteRight.ParentId == 0) { return(Json(new { result = 0, content = RetechWing.LanguageResources.Right.NotDeleteRootRight }, JsonRequestBehavior.AllowGet)); } try { _permissionManager.DeletePermission(id); RefreshRightCache(); return(Json(new { result = 1, content = RetechWing.LanguageResources.Common.DeleteSuccess }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { return(Json(new { result = 0, content = RetechWing.LanguageResources.Common.DeleteFailed + ex.Message }, JsonRequestBehavior.AllowGet)); } }
public JsonResult ChangeParent(int id, int parentId) { var permission = AllPermissions.First(p => p.PermissionId == id); permission.ParentId = parentId; _permissionManager.UpdatePermission(permission); return(Json(new { result = 1, msg = RetechWing.LanguageResources.Common.UpdateSuccess }, JsonRequestBehavior.AllowGet)); }
private void GetChildRights(int parentId, List <SysPermission> list) { foreach (SysPermission allRight in AllPermissions.Where(p => p.ParentId == parentId)) { list.Add(allRight); GetChildRights(allRight.PermissionId, list); } }
public void LoadPermissions(Assembly assembly) { var permissions = assembly.GetTypes() .SelectMany(x => x.GetMethods()) .Where(x => x.GetCustomAttributes <Preconditions.RequireCustomPermissionAttribute>().Count() > 0) .Select(x => x.GetCustomAttribute <Preconditions.RequireCustomPermissionAttribute>().Permission); foreach (var p in permissions) { if (!AllPermissions.Contains(p)) { AllPermissions.Add(p); } } }
public Result AddPermission(SocketRole role, string perm) { // Add wildcard permission if (perm.Contains("*")) { return(AddWildcardPermission(role, perm)); } // Add specific permission if (!AllPermissions.Contains(perm)) { return new Result { Type = ResultType.Fail, Message = "Permission not found or invalid format." } } ; if (!Permissions.ContainsKey(role.Id)) { var permissions = new HashSet <string>(); permissions.Add(perm); Permissions.Add(role.Id, permissions); return(new Result { Type = ResultType.Success, Message = "Created permissions set for role and added specified permission." }); } if (!Permissions[role.Id].Add(perm)) { return new Result { Type = ResultType.Warning, Message = "Role already has permission." } } ; return(new Result { Type = ResultType.Success, Message = "Added specified permission." }); }
/// <summary> /// Get permission from the list by its permission value. /// </summary> /// <param name="permissionValue"></param> /// <returns></returns> public static ApplicationPermission GetPermissionByValue(string permissionValue) { return(AllPermissions.FirstOrDefault(p => p.Value == permissionValue)); }
/// <summary> /// Get permission from the list by its permission name. /// </summary> /// <param name="permissionName"></param> /// <returns></returns> public static ApplicationPermission GetPermissionByName(string permissionName) { return(AllPermissions.Where(p => p.Name == permissionName).FirstOrDefault()); }
/// <summary> /// Get all permission values from all permissions. /// </summary> /// <returns></returns> public static string[] GetAllPermissionValues() { return(AllPermissions.Select(p => p.Value).ToArray()); }
private Result AddWildcardPermission(SocketRole role, string perm) { var allSplitPerms = AllPermissions.Select(x => x.Split('.')); var splitPerm = perm.Split('.'); if (splitPerm.All(x => x != "*")) { return new Result { Type = ResultType.Fail, Message = "Invalid permission format." } } ; // Catch foo.bar* if (splitPerm.Length > 2) { return new Result { Type = ResultType.Fail, Message = "Invalid permission format." } } ; // Catch *.foo.bar var parent = splitPerm[0]; var child = splitPerm[1]; bool setCreated = false; if (!Permissions.ContainsKey(role.Id)) { Permissions.Add(role.Id, new HashSet <string>()); setCreated = true; } if (parent == "*") { if (child == "*") { // Add all existing permissions for all parents and children foreach (var p in AllPermissions) { Permissions[role.Id].Add(p); } return(new Result { Type = ResultType.Success, Message = setCreated ? "Created permission set for role and added all existing permissions." : "Added all existing permissions to role." }); } else { // Add all child permission matches for all existing parent permissions foreach (var p in allSplitPerms.Where(x => x[1] == child)) { Permissions[role.Id].Add(AllPermissions.FirstOrDefault(x => x == $"{p[0]}.{p[1]}")); } return(new Result { Type = ResultType.Success, Message = setCreated ? $"Created permission set for role and added all child permissions matching `{child}`." : $"Added all child permissions `{child}` to role." }); } } else { // Add all child permissions for the given parent permission foreach (var p in allSplitPerms.Where(x => x[0] == parent)) { Permissions[role.Id].Add(AllPermissions.FirstOrDefault(x => x == $"{p[0]}.{p[1]}")); } return(new Result { Type = ResultType.Success, Message = setCreated ? $"Created permission set for role and added all child permissions of `{parent}`." : $"Added all child permissions of `{parent}` to role." }); } }
private Result RemoveWildcardPermission(SocketRole role, string perm) { var splitPerm = perm.Split('.'); var rolesSplitPerms = new List <string[]>(Permissions[role.Id].Select(x => x.Split('.'))); if (splitPerm.All(x => x != "*")) { return new Result { Type = ResultType.Fail, Message = "Invalid permission format." } } ; // Catch foo.bar* if (splitPerm.Length > 2) { return new Result { Type = ResultType.Fail, Message = "Invalid permission format." } } ; // Catch *.foo.bar var parent = splitPerm[0]; var child = splitPerm[1]; if (parent == "*") { if (child == "*") { // Remove all existing permissions for all parents and children Permissions.Remove(role.Id); return(new Result { Type = ResultType.Success, Message = "Removed all permissions from role." }); } else { // Add all child permission matches for all existing parent permissions foreach (var p in rolesSplitPerms.Where(x => x[1] == child)) { Permissions[role.Id].Remove(AllPermissions.FirstOrDefault(x => x == $"{p[0]}.{p[1]}")); } if (Permissions[role.Id].Count == 0) { Permissions.Remove(role.Id); } return(new Result { Type = ResultType.Success, Message = $"Removed all child permissions `{child}` from role." }); } } else { // Add all child permissions for the given parent permission foreach (var p in rolesSplitPerms.Where(x => x[0] == parent)) { Permissions[role.Id].Remove(AllPermissions.FirstOrDefault(x => x == $"{p[0]}.{p[1]}")); } if (Permissions[role.Id].Count == 0) { Permissions.Remove(role.Id); } return(new Result { Type = ResultType.Success, Message = $"Removed all child permissions of `{parent}` from role." }); } }
//保存权限 public JsonResult SaveRight(int permissionId, string rightName, string rightDesc, string controllerName, string actionName, string iconimg, int rightType, int parentRight, int showOrder = -1, string areaName = "") { try { SysPermission menu = AllPermissions.FirstOrDefault(p => p.PermissionId == permissionId); if (menu == null) { //新增 menu = new SysPermission { PermissionName = rightName, PermissionCode = rightDesc, LinkUrl = "", Controller = controllerName, Action = actionName, ParentId = parentRight, Description = rightDesc, Sort = showOrder, Icon = iconimg, PermissionType = rightType, AreaName = areaName }; _permissionManager.AddPermission(menu); AllPermissions.Add(menu); } else { menu.PermissionName = rightName; menu.Description = rightDesc; menu.PermissionCode = rightDesc; menu.LinkUrl = ""; menu.Controller = controllerName; menu.Action = actionName; menu.Sort = showOrder; menu.Icon = iconimg; menu.PermissionType = rightType; menu.AreaName = areaName; if (menu.Sort == int.MinValue) { menu.Sort = 0; } int newParentId = parentRight; //修改前的判断 if (menu.PermissionId == newParentId) { return(Json(new { result = 0, content = RetechWing.LanguageResources.Right.UpRightFails }, JsonRequestBehavior.AllowGet)); } var childs = new List <int>(); GetChildRights(menu.PermissionId, childs); if (childs.IndexOf(newParentId) >= 0) { return(Json(new { result = 0, content = RetechWing.LanguageResources.Right.UpRightFailsOne }, JsonRequestBehavior.AllowGet)); } menu.ParentId = newParentId; _permissionManager.UpdatePermission(menu); } if (menu.PermissionId > 0) { return(Json(new { result = 1, content = RetechWing.LanguageResources.Common.SaveSuccess }, JsonRequestBehavior.AllowGet)); } return(Json(new { result = 0, content = RetechWing.LanguageResources.Common.SaveFailed }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { return(Json(new { result = 0, content = RetechWing.LanguageResources.Common.SaveFailed + ex.Message }, JsonRequestBehavior.AllowGet)); } }
public bool IsForumReadOnly(int forumId) => IsAnonymous || AllPermissions?.Contains(new Permissions { ForumId = forumId, AuthRoleId = Constants.FORUM_READONLY_ROLE }) == true;
public bool IsForumRestricted(int forumId) => AllPermissions?.Contains(new Permissions { ForumId = forumId, AuthRoleId = Constants.FORUM_RESTRICTED_ROLE }) == true;