public bool HasPermission(Permission perm, PermDivisionStatus status, Casino.Division context) { foreach (var node in Permissions) { if (node.HasPerms(perm, status, context)) { return(true); } } return(false); }
public bool HasPerms(Permission testPerm, PermDivisionStatus status, Casino.Division division) { if (testPerm.Division != null) { if (status == PermDivisionStatus.NoDivision) { // nothing } else if (status == PermDivisionStatus.RequirePermissionInContextDivision) { if (this.Division != division.Name.Replace(".", "").ToLower()) { return(false); } } else if (status == PermDivisionStatus.RequirePermissionInAnyDivision) { return(false); } } else { if (status != PermDivisionStatus.NoDivision) { return(false); // since there isnt a Division, but one is required. } } string testNode = testPerm.Node; string[] testNodes = testNode.Split('.'); if (testNode == Node || Node == "*") { return(true); // node is fully specified: so has perm } for (int i = 0; i < nodes.Length && i < testNodes.Length; i++) { if (nodes[i] == "*") { return(true); } if (nodes[i] != testNodes[i]) { return(false); } } return(false); }
/*public RequirePermissionAttribute(PermCombination combination, PermDivisionStatus status, params string[] node) * { * Combination = combination; * Permissions = new List<Permission>(); * DivisionStatus = status; * foreach (var p in node) { Permissions.Add(Perms.Parse(p)); } * }*/ public override Task <PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { var self = Casino.FourAcesCasino.GetMember(context.User.Id); List <Permission> hasPermFor = new List <Permission>(); List <Permission> noPermsFor = new List <Permission>(); Casino.Division contextDivision = null; if (DivisionStatus != PermDivisionStatus.NoDivision) { contextDivision = Modules.DivisionModule.GetDivisionFromContext(context, command); } foreach (var perm in Permissions) { bool has = self.HasPermission(perm, contextDivision, DivisionStatus); if (has) { hasPermFor.Add(perm); } else { noPermsFor.Add(perm); } } if (Combination == PermCombination.All) { if (noPermsFor.Count == 0) { return(Task.FromResult(PreconditionResult.FromSuccess())); } else { string required = $"**Permissions error**\r\nYou lack the required permissions:\r\n"; foreach (var perm in noPermsFor) { required += $"- {perm}\r\n"; } return(Task.FromResult(PreconditionResult.FromError(required))); } } else if (Combination == PermCombination.Any) { if (hasPermFor.Count > 0) { return(Task.FromResult(PreconditionResult.FromSuccess())); } else { string required = $"**Permissions error**\r\nYou require any one of the following permissions:\r\n"; foreach (var perm in noPermsFor) { required += $"- {perm}\r\n"; } return(Task.FromResult(PreconditionResult.FromError(required))); } } else { // requires no permissions if (hasPermFor.Count > 0) { string required = $"**Permissions error**\r\nYou must not have any of the following:\r\n"; foreach (var perm in noPermsFor) { required += $"- {perm}\r\n"; } return(Task.FromResult(PreconditionResult.FromError(required))); } else { return(Task.FromResult(PreconditionResult.FromSuccess())); } } }