|
7 | 7 | from django.db import models |
8 | 8 | from django.db.models import QuerySet |
9 | 9 | from django.http import Http404 |
10 | | -from guardian.shortcuts import assign_perm |
11 | 10 | from simple_history.models import HistoricalRecords |
12 | 11 |
|
13 | 12 | from apps.commons.models import Language, OrganizationRelated, PermissionsSetupModel |
@@ -243,6 +242,18 @@ def get_related_organizations(self) -> List["Organization"]: |
243 | 242 | def get_default_admins_permissions(self) -> QuerySet[Permission]: |
244 | 243 | return Permission.objects.filter(content_type=self.content_type) |
245 | 244 |
|
| 245 | + def get_global_admins_permissions(self) -> QuerySet[Permission]: |
| 246 | + return Permission.objects.filter( |
| 247 | + codename__in=[ |
| 248 | + "get_user_by_email", |
| 249 | + # TODO: remove that when we have a better way to handle permissions |
| 250 | + "add_projectuser", |
| 251 | + "change_projectuser", |
| 252 | + "delete_projectuser", |
| 253 | + ], |
| 254 | + content_type__app_label="accounts", |
| 255 | + ) |
| 256 | + |
246 | 257 | def get_default_facilitators_permissions(self) -> QuerySet[Permission]: |
247 | 258 | excluded_permissions = [ |
248 | 259 | "manage_accessrequest", |
@@ -279,24 +290,22 @@ def setup_permissions( |
279 | 290 | self, user: Optional["ProjectUser"] = None, trigger_indexation: bool = True |
280 | 291 | ): |
281 | 292 | """Setup the group with default permissions.""" |
282 | | - admins = self.setup_group_permissions( |
| 293 | + admins = self.setup_group_object_permissions( |
283 | 294 | self.get_admins(), self.get_default_admins_permissions() |
284 | 295 | ) |
285 | | - assign_perm("accounts.get_user_by_email", admins) |
286 | | - # TODO: remove that when we have a better way to handle permissions |
287 | | - assign_perm("accounts.add_projectuser", admins) |
288 | | - assign_perm("accounts.change_projectuser", admins) |
289 | | - assign_perm("accounts.delete_projectuser", admins) |
290 | | - facilitators = self.setup_group_permissions( |
| 296 | + admins = self.setup_group_global_permissions( |
| 297 | + admins, self.get_global_admins_permissions() |
| 298 | + ) |
| 299 | + facilitators = self.setup_group_object_permissions( |
291 | 300 | self.get_facilitators(), self.get_default_facilitators_permissions() |
292 | 301 | ) |
293 | | - users = self.setup_group_permissions( |
| 302 | + users = self.setup_group_object_permissions( |
294 | 303 | self.get_users(), self.get_default_users_permissions() |
295 | 304 | ) |
296 | 305 |
|
297 | 306 | if user: |
298 | 307 | admins.users.add(user) |
299 | | - self.groups.add(admins, facilitators, users) |
| 308 | + self.groups.set([admins, facilitators, users]) |
300 | 309 | if trigger_indexation: |
301 | 310 | self.permissions_up_to_date = True |
302 | 311 | self.save(update_fields=["permissions_up_to_date"]) |
|
0 commit comments