--- a/src/ldt/ldt/ldt_utils/models.py Wed Oct 26 11:05:43 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/models.py Fri Oct 28 11:01:40 2011 +0200
@@ -4,6 +4,8 @@
from django.utils.translation import ugettext_lazy as _
#from ldt.core.models import Document, Owner
from ldt.core.models import Document
+from guardian.core import ObjectPermissionChecker
+from guardian.shortcuts import get_objects_for_user, assign
import ldt.indexation
from utils import (create_ldt, copy_ldt, create_empty_iri, update_iri,
generate_uuid)
@@ -111,6 +113,9 @@
class Meta:
ordering = ["title"]
+ permissions = (
+ ('view_content', 'View Content'),
+ )
def natural_key(self):
return self.iri_id
@@ -287,8 +292,30 @@
external_id = property(**external_id())
+class SafeManager(models.Manager):
+
+ user = None
+ checker = None
+
+ def check_perm_for(self, user):
+ self.user = user
+ self.checker = ObjectPermissionChecker(self.user)
+ def stop_checking(self):
+ self.user = None
+ self.checker = None
+
+ def has_user(self):
+ return self.user != None
+
+ def get_query_set(self):
+ if not self.has_user():
+ raise AttributeError("A user has to be chosen to check permissions.")
+ res = get_objects_for_user(self.user, 'ldt_utils.view_project')
+
+ return res
+
class Project(Document):
STATE_CHOICES = (
(1, 'edition'),
@@ -307,9 +334,14 @@
changed_by = models.CharField(_("changed by"), max_length=70)
state = models.IntegerField(choices=STATE_CHOICES, default=1)
description = models.TextField(null=True, blank=True)
+ objects = models.Manager()
+ objects_safe = SafeManager()
class Meta:
ordering = ["title"]
+ permissions = (
+ ('view_project', 'View Project'),
+ )
def __unicode__(self):
@@ -364,6 +396,7 @@
for content in contents:
project.contents.add(content)
project.save()
+ assign(['view_project', 'change_project'], user, project)
return create_ldt(project, user)
def copy_project(self, user, title, description=''):
@@ -372,6 +405,7 @@
project = Project(title=title, owner=owner, description=description)
project = copy_ldt(self, project, user)
project.save()
+ assign(['view_project', 'change_project'], user, project)
for content in self.contents.all():
project.contents.add(content)
project.save()