Repository URL to install this package:
Version:
0.2.0a6 ▾
|
from dj_kaos.utils.perms import get_permission_descriptor
from django.core.exceptions import ImproperlyConfigured
from rules import Predicate
def action(function=None, *,
permissions=(),
include=lambda obj: True,
exclude=lambda obj: False):
def decorator(func):
func.permissions = permissions
def check_permissions(user, obj=None):
for perm in permissions:
if isinstance(perm, str):
if not (user.has_perm(perm, obj) or
(obj and user.has_perm(get_permission_descriptor(obj._meta, perm), obj))):
return False
elif isinstance(perm, Predicate):
if not perm.test(user, obj):
return False
else:
raise ImproperlyConfigured(f"Invalid permission {perm} passed in {function} @action decorator.")
return True
func.check_permissions = check_permissions
func.include = include
func.exclude = exclude
return func
if function is None:
return decorator
else:
return decorator(function)
__all__ = (
'action',
)