public async Task <IEnumerable <string> > GetDeniedPermissionsAsync(IPermissionActor target, bool inherit = true) { PermissionSection section = target is IPermissionGroup ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, false) : await GetConfigSectionAsync <PlayerPermissionSection>(target, false); List <string> permissions; if (section != null) { permissions = section.Permissions .Where(c => c.StartsWith("!")) .Select(c => c.Substring(1).ToLower()) .ToList(); } else { permissions = new List <string>(); } if (inherit) { foreach (var parent in await GetGroupsAsync(target)) { permissions .AddRange(await GetDeniedPermissionsAsync(parent, true)); } } return(permissions.Distinct()); }
public IEnumerable <string> GetDeniedPermissions(IIdentity target, bool inherit = true) { PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, false) : GetConfigSection <PlayerPermissionSection>(target, false); List <string> permissions; if (section != null) { permissions = section.Permissions .Where(c => c.StartsWith("!")) .Select(c => c.Substring(1).ToLower()) .ToList(); } else { permissions = new List <string>(); } if (inherit) { foreach (var parent in GetGroups(target)) { permissions .AddRange(GetDeniedPermissions(parent, true)); } } return(permissions.Distinct()); }
public async Task <PermissionResult> CheckPermissionAsync(IPermissionActor target, string permission) { GuardLoaded(); GuardPermission(ref permission); GuardTarget(target); permission = permission.Replace("!!", ""); //remove double negations if (!permission.StartsWith("!") && await CheckPermissionAsync(target, "!" + permission) == PermissionResult.Grant) { return(PermissionResult.Deny); } IEnumerable <string> permissionTree = BuildPermissionTree(permission); PermissionSection section = target is IPermissionGroup ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, false) : await GetConfigSectionAsync <PlayerPermissionSection>(target, false); string[] permissions = section?.Permissions ?? new string[0]; foreach (string permissionNode in permissionTree) { foreach (string c in permissions) { if (c.Contains("*") && !c.StartsWith("!") && permission.StartsWith("!")) { continue; } if (c.Trim().Equals(permissionNode, StringComparison.OrdinalIgnoreCase)) { return(PermissionResult.Grant); } } } // check parent group permissions / player group permissions IEnumerable <IPermissionGroup> groups = await GetGroupsAsync(target); foreach (IPermissionGroup group in groups) { PermissionResult result = await CheckPermissionAsync(group, permission); if (result == PermissionResult.Grant) { return(PermissionResult.Grant); } if (result == PermissionResult.Deny) { return(PermissionResult.Deny); } } return(PermissionResult.Default); }
public bool AddPermission(IIdentity target, string permission) { GuardPermission(ref permission); GuardTarget(target); PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, true) : GetConfigSection <PlayerPermissionSection>(target, true); List <string> permissions = section.Permissions.ToList(); permissions.Add(permission); section.Permissions = permissions.ToArray(); section.Save(); return(true); }
public async Task <bool> AddPermissionAsync(IPermissionActor target, string permission) { GuardPermission(ref permission); GuardTarget(target); PermissionSection section = (target is IPermissionGroup ? (PermissionSection)await GetConfigSectionAsync <GroupPermissionSection>(target, true) : await GetConfigSectionAsync <PlayerPermissionSection>(target, true)); List <string> permissions = section.Permissions.ToList(); permissions.Add(permission); section.Permissions = permissions.ToArray(); await section.SaveAsync(); return(true); }
public async Task <IEnumerable <IPermissionGroup> > GetGroupsAsync(IPermissionActor target) { GuardLoaded(); GuardTarget(target); PermissionSection section = (target is IPermissionGroup ? (PermissionSection)await GetConfigSectionAsync <GroupPermissionSection>(target, false) : await GetConfigSectionAsync <PlayerPermissionSection>(target, false)); if (section == null) { return((await GetGroupsAsync()).Where(c => c.AutoAssign)); } return(section.GetGroups() .Select(e => GetGroupAsync(e).GetAwaiter().GetResult()) .Where(c => c != null)); }
public IEnumerable <IPermissionGroup> GetGroups(IIdentity target) { GuardLoaded(); GuardTarget(target); PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, false) : GetConfigSection <PlayerPermissionSection>(target, false); if (section == null) { return(GetGroups().Where(c => c.AutoAssign)); } return(section.GetGroups() .Select(GetGroup) .Where(c => c != null)); }
public bool AddGroup(IIdentity target, IPermissionGroup group) { GuardLoaded(); GuardTarget(target); GuardTarget(group); PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, true) : GetConfigSection <PlayerPermissionSection>(target, true); List <string> groups = section.GetGroups().ToList(); if (!groups.Any(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase))) { groups.Add(group.Id); } section.SetGroups(groups.ToArray()); section.Save(); return(true); }
public bool RemovePermission(IIdentity target, string permission) { GuardPermission(ref permission); PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, false) : GetConfigSection <PlayerPermissionSection>(target, false); if (section == null) { return(false); } List <string> permissions = section.Permissions.ToList(); int i = permissions.RemoveAll(c => c.Trim().Equals(permission, StringComparison.OrdinalIgnoreCase)); section.Permissions = permissions.ToArray(); section.Save(); return(i > 0); }
public async Task <bool> AddGroupAsync(IPermissionActor target, IPermissionGroup group) { GuardLoaded(); GuardTarget(target); GuardTarget(group); PermissionSection section = target is IPermissionGroup ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, true) : await GetConfigSectionAsync <PlayerPermissionSection>(target, true); List <string> groups = section.GetGroups().ToList(); if (!groups.Any(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase))) { groups.Add(group.Id); } section.SetGroups(groups.ToArray()); await section.SaveAsync(); return(true); }
public async Task <bool> RemovePermissionAsync(IPermissionActor target, string permission) { GuardPermission(ref permission); PermissionSection section = (target is IPermissionGroup ? (PermissionSection)await GetConfigSectionAsync <GroupPermissionSection>(target, false) : await GetConfigSectionAsync <PlayerPermissionSection>(target, false)); if (section == null) { return(false); } List <string> permissions = section.Permissions.ToList(); int i = permissions.RemoveAll(c => c.Trim().Equals(permission, StringComparison.OrdinalIgnoreCase)); section.Permissions = permissions.ToArray(); await section.SaveAsync(); return(i > 0); }
public bool RemoveGroup(IIdentity target, IPermissionGroup group) { GuardLoaded(); GuardTarget(target); GuardTarget(group); PermissionSection section = target is IPermissionGroup ? (PermissionSection)GetConfigSection <GroupPermissionSection>(target, false) : GetConfigSection <PlayerPermissionSection>(target, false); if (section == null) { return(false); } List <string> groups = section.GetGroups().ToList(); int i = groups.RemoveAll(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase)); section.SetGroups(groups.ToArray()); section.Save(); return(i > 0); }
public async Task <bool> RemoveGroupAsync(IPermissionActor target, IPermissionGroup group) { GuardLoaded(); GuardTarget(target); GuardTarget(group); PermissionSection section = target is IPermissionGroup ? (PermissionSection) await GetConfigSectionAsync <GroupPermissionSection>(target, false) : await GetConfigSectionAsync <PlayerPermissionSection>(target, false); if (section == null) { return(false); } List <string> groups = section.GetGroups().ToList(); int i = groups.RemoveAll(c => c.Equals(group.Id, StringComparison.OrdinalIgnoreCase)); section.SetGroups(groups.ToArray()); await section.SaveAsync(); return(i > 0); }