Break out the permissions into the following:

        Check whether a user is in any group, including whether a group has the '*' membership

        :type user: str
        :param user: The username being checked against

        :type command: str
        :param command: The command that is being invoked (e.g. test.ping)

        :type groups: dict
        :param groups: the dictionary with groups permissions structure.

        :rtype: tuple
        :returns: On a successful permitting match, returns 2-element tuple that contains
            the name of the group that successfully matched, and a dictionary containing
            the configuration of the group so it can be referenced.

            On failure it returns an empty tuple

def can_user_run(self, user, command, groups):
        '''
        Break out the permissions into the following:

        Check whether a user is in any group, including whether a group has the '*' membership

        :type user: str
        :param user: The username being checked against

        :type command: str
        :param command: The command that is being invoked (e.g. test.ping)

        :type groups: dict
        :param groups: the dictionary with groups permissions structure.

        :rtype: tuple
        :returns: On a successful permitting match, returns 2-element tuple that contains
            the name of the group that successfully matched, and a dictionary containing
            the configuration of the group so it can be referenced.

            On failure it returns an empty tuple

        '''
        log.info('%s wants to run %s with groups %s', user, command, groups)
        for key, val in groups.items():
            if user not in val['users']:
                if '*' not in val['users']:
                    continue  # this doesn't grant permissions, pass
            if (command not in val['commands']) and (command not in val.get('aliases', {}).keys()):
                if '*' not in val['commands']:
                    continue  # again, pass
            log.info('Slack user %s permitted to run %s', user, command)
            return (key, val,)  # matched this group, return the group
        log.info('Slack user %s denied trying to run %s', user, command)
        return ()