🐛(backend) prevent privileged users from requesting access

Privileged users of a document (owners and admins) should not be
allowed to create an access request on a document they already control.
Without aguardrail, they could inadvertently inflate the access
request queue with redundant entries.

More critically, if an owner submits an access request on their own
document, another admin could accept it and grant them a lower role
(e.g. reader), which would silently strip them of their ownership.

Signed-off-by: Mohamed El Amine BOUKERFA <[email protected]>
This commit is contained in:
Mohamed El Amine BOUKERFA
2026-03-09 10:07:23 +01:00
committed by Anthony LC
parent 6062d0e9c4
commit ca286b6de7
3 changed files with 29 additions and 1 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ and this project adheres to
- ♿️(frontend) add focus on open to modals #1948
### Fixed
- 🐛 (backend) prevent privileged users from requesting access #1898
- 🐛(frontend) fix broadcast store sync #1846
- 🐛(helm) use celery resources instead of backend resources #1887
- 🐛(helm) reverse liveness and readiness for backend deployment #1887
+6
View File
@@ -2523,6 +2523,12 @@ class DocumentAskForAccessViewSet(
"""Create a document ask for access resource."""
document = self.get_document_or_404()
if document.get_role(request.user) in models.PRIVILEGED_ROLES:
return drf.response.Response(
{"detail": "You already have privileged access to this document."},
status=drf.status.HTTP_400_BAD_REQUEST,
)
serializer = serializers.DocumentAskForAccessCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
@@ -9,6 +9,7 @@ import pytest
from rest_framework.test import APIClient
from core.api.serializers import UserSerializer
from core.choices import PRIVILEGED_ROLES
from core.factories import (
DocumentAskForAccessFactory,
DocumentFactory,
@@ -199,6 +200,27 @@ def test_api_documents_ask_for_access_create_authenticated_already_has_ask_for_a
assert response.json() == {"detail": "You already ask to access to this document."}
@pytest.mark.parametrize("role", PRIVILEGED_ROLES)
def test_api_documents_ask_for_access_create_authenticated_already_has_privileged_access(
role,
):
"""
Authenticated users with privileged access (owner or admin) should not be able to
create a document ask for access.
"""
user = UserFactory()
document = DocumentFactory(users=[(user, role)])
client = APIClient()
client.force_login(user)
response = client.post(f"/api/v1.0/documents/{document.id}/ask-for-access/")
assert response.status_code == 400
assert response.json() == {
"detail": "You already have privileged access to this document."
}
## List