diff --git a/apps/applications/api/application.py b/apps/applications/api/application.py index 6d98123bc..435ccccad 100644 --- a/apps/applications/api/application.py +++ b/apps/applications/api/application.py @@ -28,7 +28,7 @@ class ApplicationViewSet(SuggestionMixin, OrgBulkModelViewSet): } rbac_perms = { 'get_tree': 'applications.view_application', - 'match': 'assets.match_application' + 'match': 'applications.match_application' } @action(methods=['GET'], detail=False, url_path='tree') diff --git a/apps/common/drf/metadata.py b/apps/common/drf/metadata.py index 3f721bbea..59561e978 100644 --- a/apps/common/drf/metadata.py +++ b/apps/common/drf/metadata.py @@ -32,6 +32,7 @@ class SimpleMetadataWithFilters(SimpleMetadata): the fields that are accepted for 'PUT' and 'POST' methods. """ actions = {} + view.raw_action = view.action for method in self.methods & set(view.allowed_methods): if hasattr(view, 'action_map'): view.action = view.action_map.get(method.lower(), view.action) diff --git a/apps/rbac/permissions.py b/apps/rbac/permissions.py index 877cf06b2..7611698b6 100644 --- a/apps/rbac/permissions.py +++ b/apps/rbac/permissions.py @@ -54,6 +54,7 @@ class RBACPermission(permissions.DjangoModelPermissions): def get_default_action_perms(self, model_cls): if model_cls is None: return {} + perms = {} for action, tmpl in dict(self.default_rbac_perms_tmpl).items(): perms[action] = self.format_perms(tmpl, model_cls) @@ -62,9 +63,11 @@ class RBACPermission(permissions.DjangoModelPermissions): def get_rbac_perms(self, view, model_cls) -> dict: if hasattr(view, 'get_rbac_perms'): return dict(view.get_rbac_perms()) - perms = self.get_default_action_perms(model_cls) + perms = {} if hasattr(view, 'rbac_perms'): perms.update(dict(view.rbac_perms)) + if '*' not in perms: + perms.update(self.get_default_action_perms(model_cls)) return perms def _get_action_perms(self, action, model_cls, view): @@ -116,8 +119,8 @@ class RBACPermission(permissions.DjangoModelPermissions): if request.user.is_anonymous and self.authenticated_users_only: return False - action = getattr(view, 'action', None) - if action == 'metadata': + raw_action = getattr(view, 'raw_action', None) + if raw_action == 'metadata': return True perms = self.get_require_perms(request, view) diff --git a/apps/tickets/api/ticket.py b/apps/tickets/api/ticket.py index a7e4fa485..8e7923e8e 100644 --- a/apps/tickets/api/ticket.py +++ b/apps/tickets/api/ticket.py @@ -35,7 +35,7 @@ class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet): ) ordering = ('-date_created',) rbac_perms = { - 'open': 'tickets.view_ticket' + 'open': 'tickets.view_ticket', } def create(self, request, *args, **kwargs):