030bbc98fd
Шаблоны/ручное создание, access_projects, сид «Открытие аптеки». Плюс SILO/S3 для Django media. Co-authored-by: Cursor <cursoragent@cursor.com>
99 lines
4.2 KiB
Python
99 lines
4.2 KiB
Python
"""Право доступа к разделу «Проекты» портала."""
|
|
from django.db import migrations
|
|
|
|
NEW_PERMS = [
|
|
('access_projects', 'Доступ к разделу: Проекты'),
|
|
]
|
|
|
|
GROUP_ADDITIONS = {
|
|
'Офисный сотрудник': ['access_projects'],
|
|
'IT': ['access_projects'],
|
|
}
|
|
|
|
|
|
def forwards(apps, schema_editor):
|
|
Group = apps.get_model('auth', 'Group')
|
|
Permission = apps.get_model('auth', 'Permission')
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
|
|
ct, _ = ContentType.objects.get_or_create(app_label='core', model='portalaccess')
|
|
perms_by_code = {}
|
|
for codename, name in NEW_PERMS:
|
|
perm, _ = Permission.objects.get_or_create(
|
|
content_type=ct, codename=codename,
|
|
defaults={'name': name},
|
|
)
|
|
if perm.name != name:
|
|
perm.name = name
|
|
perm.save(update_fields=['name'])
|
|
perms_by_code[codename] = perm
|
|
|
|
admin_group = Group.objects.filter(name='Администратор сети').first()
|
|
if admin_group:
|
|
admin_group.permissions.add(*perms_by_code.values())
|
|
|
|
for group_name, codes in GROUP_ADDITIONS.items():
|
|
group = Group.objects.filter(name=group_name).first()
|
|
if not group:
|
|
continue
|
|
to_add = [perms_by_code[c] for c in codes if c in perms_by_code]
|
|
if to_add:
|
|
group.permissions.add(*to_add)
|
|
|
|
|
|
def backwards(apps, schema_editor):
|
|
Group = apps.get_model('auth', 'Group')
|
|
Permission = apps.get_model('auth', 'Permission')
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
|
|
ct = ContentType.objects.filter(app_label='core', model='portalaccess').first()
|
|
if ct is None:
|
|
return
|
|
perms = list(
|
|
Permission.objects.filter(content_type=ct, codename__in=[c for c, _ in NEW_PERMS])
|
|
)
|
|
if not perms:
|
|
return
|
|
for group in Group.objects.filter(
|
|
name__in=['Администратор сети', *GROUP_ADDITIONS.keys()],
|
|
):
|
|
group.permissions.remove(*perms)
|
|
Permission.objects.filter(pk__in=[p.pk for p in perms]).delete()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('core', '0025_internal_line_type_and_asterisk_ami'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AlterModelOptions(
|
|
name='portalaccess',
|
|
options={
|
|
'default_permissions': (),
|
|
'managed': False,
|
|
'permissions': [
|
|
('access_hr_portal', 'Доступ к разделу: HR-портал'),
|
|
('access_recruiting', 'Доступ к разделу: Рекрутинг'),
|
|
('access_structure', 'Доступ к разделу: Структура'),
|
|
('access_timetrack', 'Доступ к разделу: Учёт рабочего времени'),
|
|
('access_databases', 'Доступ к разделу: Системные справочники'),
|
|
('access_reports', 'Доступ к разделу: Отчёты'),
|
|
('access_purchases', 'Доступ к разделу: Закупки'),
|
|
('access_email', 'Доступ к разделу: Электронная почта'),
|
|
('access_pharmacies', 'Доступ к разделу: Аптеки'),
|
|
('access_rro', 'Доступ к разделу: РРО / ПРРО'),
|
|
('access_utilities', 'Доступ к разделу: Коммунальные услуги'),
|
|
('access_internet_billing', 'Доступ к разделу: Оплата провайдеров'),
|
|
('access_it_manager', 'Доступ к разделу: IT-отдел'),
|
|
('access_ad_mapping', 'Доступ к разделу: Active Directory'),
|
|
('access_projects', 'Доступ к разделу: Проекты'),
|
|
],
|
|
'verbose_name': 'Доступ к разделу портала',
|
|
'verbose_name_plural': 'Доступы к разделам портала',
|
|
},
|
|
),
|
|
migrations.RunPython(forwards, backwards),
|
|
]
|