src/ldt/ldt/security/utils.py
changeset 268 c0c161736794
parent 265 491d057cbfd2
child 269 4b8042fc3d33
equal deleted inserted replaced
267:e00779f0dcba 268:c0c161736794
     1 from django.conf import settings
     1 from django.conf import settings
     2 from django.contrib.contenttypes.models import ContentType
     2 from django.contrib.contenttypes.models import ContentType
     3 from django.contrib.auth.models import Group
       
     4 from guardian.core import ObjectPermissionChecker
     3 from guardian.core import ObjectPermissionChecker
     5 from guardian.shortcuts import assign, remove_perm
     4 from guardian.shortcuts import assign, remove_perm, get_users_with_perms, get_groups_with_perms
     6 
     5 
     7 try:
     6 try:
     8     from threading import local
     7     from threading import local
     9 except ImportError:
     8 except ImportError:
    10     from django.utils._threading_local import local
     9     from django.utils._threading_local import local
   102         else:
   101         else:
   103             obj.change = False
   102             obj.change = False
   104             
   103             
   105     return obj_list      
   104     return obj_list      
   106 
   105 
   107 def assign_object_to_groups(object, permissions):
   106 def assign_object_to_groups(object, read_list, write_list, owner):
   108     name = object.__class__.__name__.lower()
   107     name = object.__class__.__name__.lower()
   109     for elem in permissions:
   108     
   110         group = Group.objects.get(id=elem['group'])
   109     old_users = get_users_with_perms(object).exclude(id=owner.id)
   111         if elem['share']:
   110     old_groups = get_groups_with_perms(object)
   112             assign('view_%s' % name, group, object)
   111     
   113             if elem['perms'] == 'write':
   112     for elem in read_list:
   114                 assign('change_%s' % name, group, object)
   113         assign('view_%s' % name, elem, object)
   115             else:
   114         if elem in write_list:
   116                 remove_perm('change_%s' % name, group, object)
   115             assign('change_%s' % name, elem, object)
   117         else:
   116         else:
   118             remove_perm('view_%s' % name, group, object)
   117             remove_perm('change_%s' % name, elem, object)            
   119             remove_perm('change_%s' % name, group, object)
   118                 
       
   119     def remove_perms(new_list, old_list, obj, name):
       
   120         for e in old_list:
       
   121             if e not in new_list:
       
   122                 remove_perm('view_%s' % name, e, obj)
       
   123                 remove_perm('change_%s' % name, e, obj)
       
   124                 
       
   125     remove_perms(read_list, old_users, object, name)
       
   126     remove_perms(read_list, old_groups, object, name)
       
   127             
   120             
   128             
   121 def get_perm_form(groups, formset):
   129 def get_perm_form(groups, formset):
   122     perm_list = [] 
   130     perm_list = [] 
   123     for group in groups:
   131     for group in groups:
   124         perm_list.append({'share': False, 'perms': 'read', 'group': group.id })
   132         perm_list.append({'share': False, 'perms': 'read', 'group': group.id })