Files
Django/jituan/management/commands/seed_admin_assignments.py

90 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""为后台客服账号初始化 admin_assignment数据范围非功能权限"""
import logging
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
from jituan.constants import CLUB_ID_DEFAULT, DATA_SCOPE_SINGLE, ADMIN_ROLE_LABELS
from jituan.models import AdminAssignment
from users.business_models import User
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = '为 kefu 账号创建默认子公司任职club=xq, CLUB_ADMIN超管可不建 assignment'
def add_arguments(self, parser):
parser.add_argument(
'--club-id', default=CLUB_ID_DEFAULT, help='目标俱乐部 ID默认 xq',
)
parser.add_argument(
'--role-code', default='CLUB_ADMIN', help='任职角色码(仅展示标签,不控制菜单功能权限)',
)
parser.add_argument(
'--phone', type=str, default='', help='仅给该手机号客服添加任职(推荐)',
)
parser.add_argument(
'--all-kefu',
action='store_true',
help='给全部客服账号批量添加(慎用,会扫所有有 KefuProfile 的账号)',
)
parser.add_argument(
'--dry-run', action='store_true', help='只打印不写入',
)
def handle(self, *args, **options):
club_id = options['club_id']
role_code = options['role_code']
dry_run = options['dry_run']
target_phone = (options.get('phone') or '').strip()
all_kefu = options.get('all_kefu')
if not target_phone and not all_kefu:
raise CommandError(
'请指定 --phone 13800138000只配一个人或 --all-kefu批量全部客服'
'默认不会自动给所有人加任职。'
)
if target_phone:
target = User.query.filter(Phone=target_phone).first()
if not target:
raise CommandError(f'未找到手机号 {target_phone}')
kefu_users = [target]
else:
kefu_users = list(
User.query.filter(KefuProfile__isnull=False).select_related('KefuProfile')
)
created = 0
skipped = 0
with transaction.atomic():
for u in kefu_users:
if u.IsSuperuser:
skipped += 1
continue
exists = AdminAssignment.query.filter(
yonghuid=u.UserUID, club_id=club_id, role_code=role_code,
).exists()
if exists:
skipped += 1
continue
if dry_run:
self.stdout.write(f'would assign {u.UserUID} -> {club_id} {role_code}')
created += 1
continue
AdminAssignment.query.create(
yonghuid=u.UserUID,
club_id=club_id,
role_code=role_code,
data_scope=DATA_SCOPE_SINGLE,
is_primary=True,
status=1,
)
created += 1
label = ADMIN_ROLE_LABELS.get(role_code, role_code)
self.stdout.write(self.style.SUCCESS(
f'完成:新建 {created} 条,跳过 {skipped}club={club_id}, role={label}'
))