fa323d657c
Делает HEAD целостным: коммит 5366799 уже импортировал эти файлы, но они
не были добавлены в git (свежий checkout падал с ImportError, а migrate не
создавал таблицу GroupLocationAccess).
- core/location_access.py: область данных (accessible_pharmacies/locations,
scoped_queryset/employees, has_all_locations) — fail-closed
- apps/locations/models/access.py + миграция 0014: GroupLocationAccess,
право locations.view_all_locations
- core/tests_location_access.py: 15 сценариев scoping
- apps/reports/*: снятие лишнего гейта has_all_locations с IT-отчёта отдела
(руководитель не обязан иметь доступ ко всей сети) + тест
- apps/rro/tests: чужая аптека теперь 404 (единая область доступа), а не
«200 с урезанными панелями» — под новую модель
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 lines
817 B
Python
15 lines
817 B
Python
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
class GroupLocationAccess(models.Model):
|
|
group = models.OneToOneField('auth.Group', on_delete=models.CASCADE, related_name='location_access', verbose_name=_('Группа'))
|
|
locations = models.ManyToManyField('locations.Location', blank=True, related_name='location_access_groups', verbose_name=_('Доступные локации'), help_text=_('Дополняют свою локацию и закреплённые аптеки. Доступ к разделам выдаётся отдельно.'))
|
|
|
|
class Meta:
|
|
verbose_name = _('Область доступа группы')
|
|
verbose_name_plural = _('Области доступа групп')
|
|
|
|
def __str__(self):
|
|
return str(self.group)
|