projects: модуль проектов с шагами по отделам и Task.
Шаблоны/ручное создание, access_projects, сид «Открытие аптеки». Плюс SILO/S3 для Django media. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
"""Право доступа к разделу «Проекты» портала."""
|
||||
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),
|
||||
]
|
||||
Reference in New Issue
Block a user