Add permission inheritance by parent object. Add ACLs app model tests.
This commit is contained in:
@@ -9,6 +9,8 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class ModelPermission(object):
|
||||
_registry = {}
|
||||
_proxies = {}
|
||||
_inheritances = {}
|
||||
|
||||
@classmethod
|
||||
def register(cls, model, permissions):
|
||||
@@ -18,6 +20,25 @@ class ModelPermission(object):
|
||||
|
||||
@classmethod
|
||||
def get_for_instance(cls, instance):
|
||||
permissions = cls._registry.get(type(instance), ())
|
||||
try:
|
||||
permissions = cls._registry[type(instance)]
|
||||
except KeyError:
|
||||
try:
|
||||
permissions = cls._registry[cls._proxies[type(instance)]]
|
||||
except KeyError:
|
||||
permissions = ()
|
||||
|
||||
pks = [permission.stored_permission.pk for permission in permissions]
|
||||
return StoredPermission.objects.filter(pk__in=pks)
|
||||
|
||||
@classmethod
|
||||
def register_proxy(cls, source, model):
|
||||
cls._proxies[model] = source
|
||||
|
||||
@classmethod
|
||||
def register_inheritance(cls, model, related):
|
||||
cls._inheritances[model] = related
|
||||
|
||||
@classmethod
|
||||
def get_inheritance(cls, model):
|
||||
return cls._inheritances[model]
|
||||
|
||||
Reference in New Issue
Block a user