'Checks if given path pattern fits the subject passed in constructor.
Registers "allow" check in this helper. "Allow" check consists of
fnmatch path pattern and optional "require" check. *args and *kwargs will
be passed to the optional "require" check function.
All registered "allow" checks are executed in CheckAccess() call. The
following is done for every check:
* If fnmatch path pattern does not match the check is skipped.
* If fnmatch path pattern matches and the require parameter is None (does
not specify an additiona check) then match is successful.
No other checks are executed.
* If fnmatch path pattern matches and the require parameter specifies an
additional check, which is a function, and this function returns True,
then match is successful. No other checks are executed.
* If fnmatch path pattern matches but additional check raises,
match is unsuccessful, no other checks are executed, and exception
is propagated.
Args:
path: A string, which is a fnmatch pattern.
require: Function that will be called to perform additional checks.
None by default. It will be called like this:
require(subject_urn, *args, **kwargs).
If this function returns True, the check is considered
passed. If it raises, the check is considered failed, no
other checks are made and exception is propagated.
*args: Positional arguments that will be passed to "require" function.
**kwargs: Keyword arguments that will be passed to "require" function.'

def Allow(self, path, require=None, *args, **kwargs):

    regex_text = fnmatch.translate(path)
    regex = re.compile(regex_text)
    self.checks.append((regex_text, regex, require, args, kwargs))
