You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/tickets/migrations/0004_replace_assignees_to_u...

75 lines
2.2 KiB

# Generated by Django 4.1.13 on 2024-07-26 06:08
from django.db import migrations
import common.db.fields
def generate_user_attrs(name, match, value):
return {
"type": "attrs",
"attrs": [
{
"name": name,
"match": match,
"value": value
}
]
}
def migrate_assignees_to_users(apps, schema_editor):
rule_model = apps.get_model('tickets', 'ApprovalRule')
rules = rule_model.objects.all()
objs = []
for rule in rules:
strategy = rule.strategy
if strategy == 'super_admin':
rule.users = generate_user_attrs(
"system_roles", "m2m", ["00000000-0000-0000-0000-000000000001"]
)
elif strategy == 'org_admin':
rule.users = generate_user_attrs(
"org_roles", "m2m", ["00000000-0000-0000-0000-000000000005"]
)
elif strategy == 'super_org_admin':
rule.users = {
"type": "attrs",
"attrs": [
{"name": "org_roles", "match": "m2m", "value": ["00000000-0000-0000-0000-000000000005"]},
{"name": "system_roles", "match": "m2m", "value": ["00000000-0000-0000-0000-000000000001"]}
]
}
elif strategy == 'custom_user':
user_ids = [str(user_id) for user_id in rule.assignees.values_list('id', flat=True)]
rule.users = {"type": "ids", "ids": user_ids}
else:
continue
objs.append(rule)
rule_model.objects.bulk_update(objs, ['users'])
class Migration(migrations.Migration):
dependencies = [
('tickets', '0003_initial_ticket_flow_data'),
]
operations = [
migrations.AddField(
model_name='approvalrule',
name='users',
field=common.db.fields.JSONManyToManyField(default=dict, to='users.User', verbose_name='Users'),
),
migrations.RunPython(migrate_assignees_to_users),
migrations.RemoveField(
model_name='approvalrule',
name='assignees',
),
migrations.RemoveField(
model_name='approvalrule',
name='strategy',
),
]