diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-18 03:14:09 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-18 03:14:09 +0100 | 
| commit | 07f682069b5b1cd432125de37c59c618bef16e0a (patch) | |
| tree | f99625df790783d15eaa98d2bbf9d075532c4bd0 /ishtar/furnitures/backend.py | |
| parent | 78000757fdc7ca58826acbadffbd0b5b4b085cc3 (diff) | |
| download | Ishtar-07f682069b5b1cd432125de37c59c618bef16e0a.tar.bz2 Ishtar-07f682069b5b1cd432125de37c59c618bef16e0a.zip | |
Integration of right management (refs #49)
Diffstat (limited to 'ishtar/furnitures/backend.py')
| -rw-r--r-- | ishtar/furnitures/backend.py | 23 | 
1 files changed, 17 insertions, 6 deletions
| diff --git a/ishtar/furnitures/backend.py b/ishtar/furnitures/backend.py index c9b8e2b23..d7d3384a8 100644 --- a/ishtar/furnitures/backend.py +++ b/ishtar/furnitures/backend.py @@ -23,6 +23,9 @@ Permission backend to manage "own" objects  from django.conf import settings  from django.contrib.auth.models import User +from django.core.exceptions import ObjectDoesNotExist + +import models  class ObjectOwnPermBackend(object):      supports_object_permissions = True @@ -32,18 +35,26 @@ class ObjectOwnPermBackend(object):          # managed by the default backend          return None -    def has_perm(self, user_obj, perm, obj=None): +    def has_perm(self, user_obj, perm, model=None, obj=None):          if not user_obj.is_authenticated(): -            user_obj = User.objects.get(pk=settings.ANONYMOUS_USER_ID) - -        if obj is None: -            # managed by the default backend +            return False +        if not model: +            # let it manage by the default backend              return False          try: +            ishtar_user = models.IshtarUser.objects.get(user_ptr=user_obj) +        except ObjectDoesNotExist: +            return False +        try:              # only manage "own" permissions              assert perm.split('.')[-1].split('_')[1] == 'own'          except (IndexError, AssertionError):              return False - +        if obj is None: +            model_name = perm.split('_')[-1].capitalize() +            if not hasattr(models, model_name): +                return False +            model = getattr(models, model_name) +            return user_obj.has_perm(perm) and model.has_item_of(ishtar_user)          return user_obj.has_perm(perm) and obj.is_own(user_obj) | 
