feat: implement document and folder permission logic and associated unit tests

This commit is contained in:
Karl Determe 2026-08-18 14:13:37 +02:00
parent 17726812c4
commit 192bd1cbc4
2 changed files with 28 additions and 3 deletions

View file

@ -139,13 +139,13 @@ def user_has_document_permission(
def user_is_documents_admin(user) -> bool: def user_is_documents_admin(user) -> bool:
if user is None or not getattr(user, "is_authenticated", False): if user is None or not getattr(user, "is_authenticated", False):
return False return False
if getattr(user, "is_superuser", False) or getattr(user, "is_staff", False): if getattr(user, "is_superuser", False):
return True return True
config = getattr(user, "config", None) config = getattr(user, "config", None)
if config is None: if config is None:
return False return False
# Admins et top_managers peuvent tout voir # Seuls les admins ont tous les droits d'administration sur les répertoires et documents
if config.roles.filter(name__in=["admin", "top_manager"]).exists(): if config.roles.filter(name="admin").exists():
return True return True
return False return False

View file

@ -15,6 +15,7 @@ from .permissions import (
filter_folders_for_user, filter_folders_for_user,
get_user_visible_folder_ids, get_user_visible_folder_ids,
user_has_document_permission, user_has_document_permission,
user_is_documents_admin,
) )
@ -110,6 +111,30 @@ class DocumentPermissionTests(TestCase):
self.assertIn(self.folder.pk, visible) self.assertIn(self.folder.pk, visible)
self.assertIn(self.parent_folder.pk, visible) self.assertIn(self.parent_folder.pk, visible)
def test_admin_role_is_documents_admin_and_sees_all_folders(self):
admin_user = User.objects.create_user(username="admin_role_user", password="pwd")
admin_config = UserConfig.objects.create(user=admin_user, is_intern=True)
admin_role, _ = Role.objects.get_or_create(name="admin")
admin_config.roles.add(admin_role)
self.assertTrue(user_is_documents_admin(admin_user))
queryset = DocumentFolder.objects.all()
filtered = filter_folders_for_user(queryset, admin_user)
self.assertEqual(set(filtered.values_list("pk", flat=True)), set(queryset.values_list("pk", flat=True)))
def test_top_manager_is_not_documents_admin_and_does_not_see_all_folders(self):
tm_user = User.objects.create_user(username="top_manager_user", password="pwd")
tm_config = UserConfig.objects.create(user=tm_user, is_intern=True)
tm_role, _ = Role.objects.get_or_create(name="top_manager")
tm_config.roles.add(tm_role)
self.assertFalse(user_is_documents_admin(tm_user))
queryset = DocumentFolder.objects.all()
filtered = filter_folders_for_user(queryset, tm_user)
# tm_user has no owned folders, shares, or thematics, so they should see no folders
self.assertEqual(set(filtered.values_list("pk", flat=True)), set())
class DocumentListViewTests(TestCase): class DocumentListViewTests(TestCase):
def setUp(self): def setUp(self):