@@ -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-
7559def 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