Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /*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()));
                }
            }
        }