Skip to content

Commit aaf8d02

Browse files
committed
Use database validation for all models
1 parent 4302d6d commit aaf8d02

File tree

1 file changed

+8
-23
lines changed

1 file changed

+8
-23
lines changed

ansible_base/rbac/validators.py

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,40 +56,25 @@ def permissions_allowed_for_system_role() -> dict[Type[Model], list[str]]:
5656
return permissions_by_model
5757

5858

59-
def permissions_allowed_for_remote_cls(cls: Type[RemoteObject]) -> dict[Union[Type[Model], Type[RemoteObject]], list[str]]:
60-
"Model is on remote server, return valid permissions via the content type definitions"
61-
permissions_by_model = defaultdict(list)
62-
# Add permissions for the current type
63-
cls_ct = cls.get_ct_from_type()
64-
for permission in cls_ct.dab_permissions.all():
65-
if not is_add_perm(permission.codename):
66-
permissions_by_model[cls].append(permission.codename)
67-
68-
# Add permissions for all child types, although this is probably relatively uncommon for remote models
69-
for ct in cls_ct.child_content_types.prefetch_related('dab_permissions'):
70-
for permission in ct.dab_permissions.all():
71-
permissions_by_model[ct.model_class()].append(permission.codename)
72-
return permissions_by_model
73-
74-
7559
def permissions_allowed_for_role(cls) -> dict[Union[Type[Model], Type[RemoteObject]], list[str]]:
7660
"Permission codenames valid for a RoleDefinition of given class, organized by permission class"
7761
if cls is None:
7862
return permissions_allowed_for_system_role()
79-
elif issubclass(cls, RemoteObject):
80-
return permissions_allowed_for_remote_cls(cls)
8163

8264
if not permission_registry.is_registered(cls):
8365
raise ValidationError(f'Django-ansible-base RBAC does not track permissions for model {cls._meta.model_name}')
8466

85-
# Include direct model permissions (except for add permission)
8667
permissions_by_model = defaultdict(list)
87-
permissions_by_model[cls] = [codename for codename in codenames_for_cls(cls) if not is_add_perm(codename)]
8868

89-
# Include model permissions for all child models, including the add permission
90-
for rel, child_cls in permission_registry.get_child_models(cls):
91-
permissions_by_model[child_cls] += codenames_for_cls(child_cls)
69+
cls_ct = permission_registry.content_type_model.objects.get_for_model(cls)
70+
for permission in cls_ct.dab_permissions.all():
71+
if not is_add_perm(permission.codename):
72+
permissions_by_model[cls].append(permission.codename)
9273

74+
# Add permissions for all child types, although this is probably relatively uncommon for remote models
75+
for ct in cls_ct.child_content_types.prefetch_related('dab_permissions'):
76+
for permission in ct.dab_permissions.all():
77+
permissions_by_model[ct.model_class()].append(permission.codename)
9378
return permissions_by_model
9479

9580

0 commit comments

Comments
 (0)