src/ldt/ldt/ldt_utils/models.py
changeset 228 94fdb72b7d56
parent 178 4b83c370dc8a
child 229 fce9a02cc0a2
--- 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()