Repository URL to install this package:
Version:
0.2.0a3 ▾
|
from dj_kaos_utils.perms import get_permission_name
from django.core.exceptions import ImproperlyConfigured
from rules import Predicate
def action(function=None, *,
permissions=(),
include=lambda x: True,
exclude=lambda x: False):
def decorator(func):
func.permissions = permissions
def check_permissions(user, obj):
for perm in permissions:
if isinstance(perm, str):
if not (user.has_perm(perm) or user.has_perm(get_permission_name(obj._meta, perm))):
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',
)