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 | d0dee00918622fde2bdcaf32109b0a1e51410715 (patch) | |
| tree | f99625df790783d15eaa98d2bbf9d075532c4bd0 /ishtar/furnitures/backend.py | |
| parent | 8be910aa1b34c25ad858b55d3be92afef63dd860 (diff) | |
| download | Ishtar-d0dee00918622fde2bdcaf32109b0a1e51410715.tar.bz2 Ishtar-d0dee00918622fde2bdcaf32109b0a1e51410715.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) |
