56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
"""将指定手机号设为超级管理员(功能权限 + 集团视图)。"""
|
||
import uuid
|
||
|
||
from django.core.management.base import BaseCommand
|
||
from django.db import transaction
|
||
from django.utils import timezone
|
||
|
||
from gvsdsdk.models import Role, Permission, RolePermission, UserRole
|
||
from jituan.constants import SUPER_ADMIN_PHONES
|
||
from users.business_models import User
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = '将 SUPER_ADMIN_PHONES 设为 IsSuperuser,并绑定「管理员」角色(含 000001)'
|
||
|
||
def handle(self, *args, **options):
|
||
admin_role = Role.objects.filter(RoleName='管理员', RoleStatus=1).first()
|
||
super_perm = Permission.objects.filter(PermCode='000001', PermStatus=1).first()
|
||
if admin_role and super_perm:
|
||
if not RolePermission.objects.filter(
|
||
RoleUUID=admin_role.RoleUUID, PermUUID=super_perm.PermUUID,
|
||
).exists():
|
||
RolePermission.objects.create(
|
||
RolePermUUID=uuid.uuid4().bytes,
|
||
RoleUUID=admin_role.RoleUUID,
|
||
PermUUID=super_perm.PermUUID,
|
||
CreateTime=timezone.now(),
|
||
)
|
||
self.stdout.write(self.style.SUCCESS('已为「管理员」角色绑定 000001 权限'))
|
||
|
||
updated = 0
|
||
for phone in SUPER_ADMIN_PHONES:
|
||
users = list(User.query.filter(Phone=phone))
|
||
if not users:
|
||
self.stdout.write(self.style.WARNING(f'未找到手机号 {phone}'))
|
||
continue
|
||
for user in users:
|
||
with transaction.atomic():
|
||
user.IsSuperuser = True
|
||
user.IsStaff = True
|
||
user.save(update_fields=['IsSuperuser', 'IsStaff'])
|
||
if admin_role and not UserRole.objects.filter(
|
||
UserUUID=user.UserUUID, RoleUUID=admin_role.RoleUUID,
|
||
).exists():
|
||
UserRole.objects.create(
|
||
UserRoleUUID=uuid.uuid4().bytes,
|
||
UserUUID=user.UserUUID,
|
||
RoleUUID=admin_role.RoleUUID,
|
||
CreateTime=timezone.now(),
|
||
)
|
||
updated += 1
|
||
self.stdout.write(self.style.SUCCESS(
|
||
f'已设置超管: {phone} (UserUID={user.UserUID})'
|
||
))
|
||
self.stdout.write(self.style.SUCCESS(f'完成,更新 {updated} 个账号'))
|