Add anonymous user support to the permission app
This commit is contained in:
@@ -17,7 +17,6 @@ logger = logging.getLogger(__name__)
|
|||||||
class RoleMemberManager(models.Manager):
|
class RoleMemberManager(models.Manager):
|
||||||
def get_roles_for_member(self, member_obj):
|
def get_roles_for_member(self, member_obj):
|
||||||
member_obj = AnonymousUserSingleton.objects.passthru_check(member_obj)
|
member_obj = AnonymousUserSingleton.objects.passthru_check(member_obj)
|
||||||
|
|
||||||
member_type = ContentType.objects.get_for_model(member_obj)
|
member_type = ContentType.objects.get_for_model(member_obj)
|
||||||
return [role_member.role for role_member in self.model.objects.filter(member_type=member_type, member_id=member_obj.pk)]
|
return [role_member.role for role_member in self.model.objects.filter(member_type=member_type, member_id=member_obj.pk)]
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ from django.contrib.contenttypes import generic
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
|
from common.models import AnonymousUserSingleton
|
||||||
|
|
||||||
from .managers import (RoleMemberManager, StoredPermissionManager)
|
from .managers import (RoleMemberManager, StoredPermissionManager)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -44,6 +46,8 @@ class PermissionManager(object):
|
|||||||
if permission.requester_has_this(requester):
|
if permission.requester_has_this(requester):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
logger.debug('no permission')
|
||||||
|
|
||||||
raise PermissionDenied(ugettext(u'Insufficient permissions.'))
|
raise PermissionDenied(ugettext(u'Insufficient permissions.'))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -105,8 +109,7 @@ class Permission(object):
|
|||||||
return stored_permission
|
return stored_permission
|
||||||
|
|
||||||
def requester_has_this(self, requester):
|
def requester_has_this(self, requester):
|
||||||
stored_permission = self.get_stored_permission(
|
stored_permission = self.get_stored_permission()
|
||||||
)
|
|
||||||
return stored_permission.requester_has_this(requester)
|
return stored_permission.requester_has_this(requester)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
@@ -139,6 +142,8 @@ class StoredPermission(models.Model):
|
|||||||
return [holder.holder_object for holder in self.permissionholder_set.all()]
|
return [holder.holder_object for holder in self.permissionholder_set.all()]
|
||||||
|
|
||||||
def requester_has_this(self, requester):
|
def requester_has_this(self, requester):
|
||||||
|
requester = AnonymousUserSingleton.objects.passthru_check(requester)
|
||||||
|
logger.debug('requester: %s' % requester)
|
||||||
if isinstance(requester, User):
|
if isinstance(requester, User):
|
||||||
if requester.is_superuser or requester.is_staff:
|
if requester.is_superuser or requester.is_staff:
|
||||||
return True
|
return True
|
||||||
@@ -160,11 +165,16 @@ class StoredPermission(models.Model):
|
|||||||
if self.requester_has_this(membership):
|
if self.requester_has_this(membership):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
logger.debug('Fallthru')
|
||||||
|
return False
|
||||||
|
|
||||||
def grant_to(self, requester):
|
def grant_to(self, requester):
|
||||||
|
requester = AnonymousUserSingleton.objects.passthru_check(requester)
|
||||||
permission_holder, created = PermissionHolder.objects.get_or_create(permission=self, holder_type=ContentType.objects.get_for_model(requester), holder_id=requester.pk)
|
permission_holder, created = PermissionHolder.objects.get_or_create(permission=self, holder_type=ContentType.objects.get_for_model(requester), holder_id=requester.pk)
|
||||||
return created
|
return created
|
||||||
|
|
||||||
def revoke_from(self, holder):
|
def revoke_from(self, holder):
|
||||||
|
requester = AnonymousUserSingleton.objects.passthru_check(requester)
|
||||||
try:
|
try:
|
||||||
permission_holder = PermissionHolder.objects.get(permission=self, holder_type=ContentType.objects.get_for_model(holder), holder_id=holder.pk)
|
permission_holder = PermissionHolder.objects.get(permission=self, holder_type=ContentType.objects.get_for_model(holder), holder_id=holder.pk)
|
||||||
permission_holder.delete()
|
permission_holder.delete()
|
||||||
@@ -199,6 +209,7 @@ class Role(models.Model):
|
|||||||
verbose_name_plural = _(u'roles')
|
verbose_name_plural = _(u'roles')
|
||||||
|
|
||||||
def add_member(self, member):
|
def add_member(self, member):
|
||||||
|
member = AnonymousUserSingleton.objects.passthru_check(member)
|
||||||
role_member, created = RoleMember.objects.get_or_create(
|
role_member, created = RoleMember.objects.get_or_create(
|
||||||
role=self,
|
role=self,
|
||||||
member_type=ContentType.objects.get_for_model(member),
|
member_type=ContentType.objects.get_for_model(member),
|
||||||
|
|||||||
Reference in New Issue
Block a user