mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-23 12:29:47 +00:00
perf: Approval process role selection supports multiple strategies
This commit is contained in:
74
apps/tickets/migrations/0004_replace_assignees_to_users.py
Normal file
74
apps/tickets/migrations/0004_replace_assignees_to_users.py
Normal file
@@ -0,0 +1,74 @@
|
||||
# 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',
|
||||
),
|
||||
]
|
Reference in New Issue
Block a user