@@ -839,49 +839,49 @@ class NotAnonymous(object):
else:
return func(*fargs, **fkwargs)
class _PermsDecorator(object):
"""Base class for controller decorators with multiple permissions"""
def __init__(self, *required_perms):
self.required_perms = required_perms # usually very short - a list is thus fine
def __call__(self, func):
return decorator(self.__wrapper, func)
def __wrapper(self, func, *fargs, **fkwargs):
cls = fargs[0]
user = request.authuser
log.debug('checking %s permissions %s for %s %s',
self.__class__.__name__, self.required_perms, cls, user)
if self.check_permissions(user):
log.debug('Permission granted for %s %s', cls, user)
log.debug('Permission denied for %s %s', cls, user)
log.info('Permission denied for %s %s', cls, user)
if user.is_default_user:
raise _redirect_to_login(_('You need to be signed in to view this page'))
raise HTTPForbidden()
def check_permissions(self, user):
raise NotImplementedError()
class HasPermissionAnyDecorator(_PermsDecorator):
"""
Checks the user has any of the given global permissions.
global_permissions = user.permissions['global'] # usually very short
return any(p in global_permissions for p in self.required_perms)
class _PermDecorator(_PermsDecorator):
"""Base class for controller decorators with a single permission"""
def __init__(self, required_perm):
_PermsDecorator.__init__(self, [required_perm])
Status change: