Move source_object class method to the classes module

This commit is contained in:
Roberto Rosario
2012-01-20 22:52:56 -04:00
parent 6117fde649
commit 796dcc908a
2 changed files with 23 additions and 20 deletions

View File

@@ -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'

View File

@@ -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