Выдача/отзыв права на отчёты по всем отделам конкретному сотруднику
из портала управления группами.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Section-based portal access, matrix прав по группам, аккаунтинг-портал,
управление группами пользователей, справочники, дашборд и общий каркас
навигации/стилей.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- WebDAV-клиент (PROPFIND/GET/PUT/DELETE) под сервисным аккаунтом
- access.py: can_access_pharmacy_docs (аптека видит только свою) + safe_filename
(защита от path traversal); путь папки выводится только из объекта аптеки
- Вьюхи documents/download/upload/delete с проверкой доступа на каждом эндпоинте
- Вкладка «Документы» на pharmacy-detail с ленивой HTMX-загрузкой
- Тесты авторизации: свой/чужой скоуп, 403, traversal, аноним
Аптечные сотрудники учёток Nextcloud не имеют — доступ идёт через портал под
сервисным аккаунтом, вся авторизация на стороне ACORE.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Мультиязычность: русский — базовый (msgid), украинский и английский — переводы.
- Настройки: LocaleMiddleware, LANGUAGES=[ru,uk,en], LOCALE_PATHS, i18n
context_processor; urls: django.conf.urls.i18n (set_language)
- Шелл index.html: {% load i18n %}, все пункты навигации/меню/пользовательского
меню/нижней навигации помечены {% trans %}; динамический <html lang>;
переключатель языков в хедере (select -> set_language)
- Каталоги locale/uk и locale/en: переведены строки меню/шелла (34), собраны .mo
- .gitignore: разрешено трекать locale/**/*.mo (нужны на проде, CI нет)
Остальные страницы пока на украинском (хардкод) — переводятся дальше поэтапно.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- ad_connector: restrict provisioning to office employees
(user_location_type='office') in sync service, signals and command;
disable AD account on transfer out of office, re-enable on return
- ad_connector: /ad-mapping/ page (staff only) — match office employees
to AD accounts with suggestions by email/login/full name, link/unlink/
create actions, list of unmatched domain accounts; sidebar nav item
- core: auto-rebuild treenode Directory tree (_path/_depth) after
import-export imports and post_migrate; "rebuild tree" button in
DirectoryAdmin and rebuild_directory_tree management command
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>