core/portal: сотрудник без группы видит только базовые разделы

Ранее разделы с perm=None (Новости, Задачи, Дислокация, Документы, Чат,
Календарь, HR-портал, Справка) были доступны любому вошедшему — сотрудник
без назначенной группы видел почти весь портал. Теперь такие разделы
требуют хотя бы одной группы; без групп доступны только базовые:
Главная, Профиль, Поддержка IT.

- user_can_access: BASELINE_OPEN_KEYS + gate «есть ли группа» для perm=None
- PortalSectionAccessMiddleware: барьер по префиксу URL (в т.ч. вложенные
  страницы вроде /tasks/5/), /settings/ не гейтим (редирект на свой профиль)
- index.html: пункты меню под can_section (сайдбар, дропдаун, bottom-nav),
  секция «Управление» скрывается целиком, если пусто
- тесты: политика без-группы + прямой заход по URL; тест-фабрики выдают
  группу (реальный сотрудник её имеет)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 18:26:15 +03:00
parent a62f023a90
commit b2f0c2a1e2
11 changed files with 184 additions and 8 deletions
+3
View File
@@ -162,6 +162,9 @@ class DislocationColumnsTests(TestCase):
mattermost_sync_enabled=False,
ad_sync_enabled=False,
)
# Любая группа = доступ к открытым разделам (в т.ч. /dislocation/).
from django.contrib.auth.models import Group
cls.user.groups.add(Group.objects.get_or_create(name='Сотрудники (тест)')[0])
DislocationColumnPreset.objects.update_or_create(
code='standard',
defaults={