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 }) |