Move source_object class method to the classes module
This commit is contained in:
@@ -16,6 +16,13 @@ logger = logging.getLogger(__name__)
|
|||||||
_cache = {}
|
_cache = {}
|
||||||
|
|
||||||
|
|
||||||
|
def get_source_object(obj):
|
||||||
|
if isinstance(obj, EncapsulatedObject):
|
||||||
|
return obj.source_object
|
||||||
|
else:
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
class EncapsulatedObject(object):
|
class EncapsulatedObject(object):
|
||||||
source_object_name = u'source_object'
|
source_object_name = u'source_object'
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ from django.core.urlresolvers import reverse
|
|||||||
from common.models import AnonymousUserSingleton
|
from common.models import AnonymousUserSingleton
|
||||||
from permissions.models import Permission
|
from permissions.models import Permission
|
||||||
|
|
||||||
from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder
|
from .classes import (EncapsulatedObject, AccessHolder, ClassAccessHolder,
|
||||||
|
get_source_object)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -23,18 +24,12 @@ class AccessEntryManager(models.Manager):
|
|||||||
Implement a 3 tier permission system, involving a permissions, an actor
|
Implement a 3 tier permission system, involving a permissions, an actor
|
||||||
and an object
|
and an object
|
||||||
"""
|
"""
|
||||||
def source_object(self, obj):
|
|
||||||
if isinstance(obj, EncapsulatedObject):
|
|
||||||
return obj.source_object
|
|
||||||
else:
|
|
||||||
return obj
|
|
||||||
|
|
||||||
def grant(self, permission, actor, obj):
|
def grant(self, permission, actor, obj):
|
||||||
"""
|
"""
|
||||||
Grant a permission (what), (to) an actor, (on) a specific object
|
Grant a permission (what), (to) an actor, (on) a specific object
|
||||||
"""
|
"""
|
||||||
obj = self.source_object(obj)
|
obj = get_source_object(obj)
|
||||||
actor = self.source_object(actor)
|
actor = get_source_object(actor)
|
||||||
|
|
||||||
access_entry, created = self.model.objects.get_or_create(
|
access_entry, created = self.model.objects.get_or_create(
|
||||||
permission=permission,
|
permission=permission,
|
||||||
@@ -49,8 +44,8 @@ class AccessEntryManager(models.Manager):
|
|||||||
"""
|
"""
|
||||||
Revoke a permission (what), (from) an actor, (on) a specific object
|
Revoke a permission (what), (from) an actor, (on) a specific object
|
||||||
"""
|
"""
|
||||||
obj = self.source_object(obj)
|
obj = get_source_object(obj)
|
||||||
actor = self.source_object(actor)
|
actor = get_source_object(actor)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
access_entry = self.model.objects.get(
|
access_entry = self.model.objects.get(
|
||||||
@@ -60,17 +55,18 @@ class AccessEntryManager(models.Manager):
|
|||||||
content_type=ContentType.objects.get_for_model(obj),
|
content_type=ContentType.objects.get_for_model(obj),
|
||||||
object_id=obj.pk
|
object_id=obj.pk
|
||||||
)
|
)
|
||||||
access_entry.delete()
|
|
||||||
return True
|
|
||||||
except self.model.DoesNotExist:
|
except self.model.DoesNotExist:
|
||||||
return False
|
return False
|
||||||
|
else:
|
||||||
|
access_entry.delete()
|
||||||
|
return True
|
||||||
|
|
||||||
def has_access(self, permission, actor, obj):
|
def has_access(self, permission, actor, obj):
|
||||||
"""
|
"""
|
||||||
Returns whether an actor has a specific permission for an object
|
Returns whether an actor has a specific permission for an object
|
||||||
"""
|
"""
|
||||||
obj = self.source_object(obj)
|
obj = get_source_object(obj)
|
||||||
actor = self.source_object(actor)
|
actor = get_source_object(actor)
|
||||||
|
|
||||||
if isinstance(actor, User):
|
if isinstance(actor, User):
|
||||||
if actor.is_superuser or actor.is_staff:
|
if actor.is_superuser or actor.is_staff:
|
||||||
@@ -93,8 +89,8 @@ class AccessEntryManager(models.Manager):
|
|||||||
|
|
||||||
def check_access(self, permission, actor, obj):
|
def check_access(self, permission, actor, obj):
|
||||||
# TODO: Merge with has_access
|
# TODO: Merge with has_access
|
||||||
obj = self.source_object(obj)
|
obj = get_source_object(obj)
|
||||||
actor = self.source_object(actor)
|
actor = get_source_object(actor)
|
||||||
|
|
||||||
if self.has_access(permission, actor, obj):
|
if self.has_access(permission, actor, obj):
|
||||||
return True
|
return True
|
||||||
@@ -105,8 +101,8 @@ class AccessEntryManager(models.Manager):
|
|||||||
"""
|
"""
|
||||||
Returns whether an actor has at least one of a list of permissions for an object
|
Returns whether an actor has at least one of a list of permissions for an object
|
||||||
"""
|
"""
|
||||||
obj = self.source_object(obj)
|
obj = get_source_object(obj)
|
||||||
actor = self.source_object(actor)
|
actor = get_source_object(actor)
|
||||||
for permission in permission_list:
|
for permission in permission_list:
|
||||||
if self.has_access(permission, actor, obj):
|
if self.has_access(permission, actor, obj):
|
||||||
return True
|
return True
|
||||||
@@ -211,7 +207,7 @@ class DefaultAccessEntryManager(models.Manager):
|
|||||||
content type is created.
|
content type is created.
|
||||||
"""
|
"""
|
||||||
def get_holders_for(self, cls):
|
def get_holders_for(self, cls):
|
||||||
cls = AccessEntryManager.source_object(cls)
|
cls = get_source_object(cls)
|
||||||
#if isinstance(cls, EncapsulatedObject):
|
#if isinstance(cls, EncapsulatedObject):
|
||||||
# cls = cls.source_object
|
# cls = cls.source_object
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user