|
7 | 7 |
|
8 | 8 | from ansible_base.lib.utils.settings import get_setting |
9 | 9 | from ansible_base.rbac.evaluations import has_super_permission |
10 | | -from ansible_base.rbac.models import ObjectRole |
| 10 | +from ansible_base.rbac.models import ObjectRole, DABPermission |
11 | 11 | from ansible_base.rbac.permission_registry import permission_registry |
12 | 12 | from ansible_base.rbac.validators import permissions_allowed_for_role |
| 13 | +from ansible_base.rbac.remote import RemoteObject |
13 | 14 |
|
14 | 15 |
|
15 | 16 | def visible_users(request_user, queryset=None, always_show_superusers=True, always_show_self=True) -> QuerySet: |
@@ -78,7 +79,17 @@ def check_content_obj_permission(request_user, obj) -> None: |
78 | 79 | on objects, so we firstly look to a simple matter of having change permission |
79 | 80 | If that is not available, then we check all object-level permissions. |
80 | 81 | """ |
81 | | - if 'change' in obj._meta.default_permissions: |
| 82 | + if isinstance(obj, RemoteObject): |
| 83 | + permissions = DABPermission.objects.filter(content_type=obj.content_type) |
| 84 | + for permission in permissions: |
| 85 | + if permission.codename.startswith('change'): |
| 86 | + if not request_user.has_obj_perm(obj, 'change'): |
| 87 | + raise PermissionDenied |
| 88 | + return |
| 89 | + for permission in permissions: |
| 90 | + if not request_user.has_obj_perm(obj, permission.codename): |
| 91 | + raise PermissionDenied |
| 92 | + elif 'change' in obj._meta.default_permissions: |
82 | 93 | # Model has no change permission, so user must have all permissions for the applicable model |
83 | 94 | if not request_user.has_obj_perm(obj, 'change'): |
84 | 95 | raise PermissionDenied |
|
0 commit comments