feat: 角色协议(勾选+阅读秒数+卡点)与冻结说明按身份返回
新增协议表/签署留痕、后台与小程序 API;去掉手写依赖;支持抢单/注册/提现等卡点配置。冻结问号文案按角色字典下发。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -68,6 +68,12 @@ EXTRA_PERMISSIONS = [
|
||||
'查看罚款率/投诉率等解冻相关指标',
|
||||
'资金冻结',
|
||||
),
|
||||
(
|
||||
'xycfg001',
|
||||
'角色协议配置',
|
||||
'配置打手/管事/组长用户协议并发布版本',
|
||||
'小程序配置',
|
||||
),
|
||||
# ---------- 店铺管理(999 系列:列表/详情/复制/提现等) ----------
|
||||
('999a', '店铺状态管理', '修改店铺封禁/正常状态', '店铺管理'),
|
||||
('999b', '店铺余额与创建', '修改可提现余额、添加新店铺', '店铺管理'),
|
||||
|
||||
@@ -42,3 +42,7 @@ class Command(BaseCommand):
|
||||
call_command('seed_fund_freeze_perm')
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.WARNING(f'seed_fund_freeze_perm 跳过: {e}'))
|
||||
try:
|
||||
call_command('seed_role_agreement_perm')
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.WARNING(f'seed_role_agreement_perm 跳过: {e}'))
|
||||
|
||||
119
jituan/management/commands/seed_role_agreement_perm.py
Normal file
119
jituan/management/commands/seed_role_agreement_perm.py
Normal file
@@ -0,0 +1,119 @@
|
||||
"""写入角色协议权限码,并可按俱乐部挂到角色。
|
||||
|
||||
权限码:
|
||||
xycfg001 角色协议配置
|
||||
|
||||
用法:
|
||||
python manage.py seed_role_agreement_perm
|
||||
python manage.py seed_role_agreement_perm --club-id lxs --role-name 管理员
|
||||
"""
|
||||
import uuid
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
|
||||
from gvsdsdk.models import Permission, Role, RolePermission
|
||||
|
||||
from jituan.models import Club
|
||||
|
||||
PERMS = [
|
||||
('xycfg001', '角色协议配置', '配置打手/管事/组长用户协议并发布版本', '小程序配置'),
|
||||
]
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '写入角色协议权限码,并按俱乐部挂到角色'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('--club-id', default='', help='仅处理该俱乐部')
|
||||
parser.add_argument('--all-clubs', action='store_true')
|
||||
parser.add_argument('--role-name', default='', help='角色名;空则只确保权限码')
|
||||
parser.add_argument('--dry-run', action='store_true')
|
||||
|
||||
def handle(self, *args, **options):
|
||||
dry_run = options['dry_run']
|
||||
club_id = (options.get('club_id') or '').strip()
|
||||
all_clubs = options.get('all_clubs')
|
||||
role_name = (options.get('role_name') or '').strip()
|
||||
|
||||
sample = Permission.objects.filter(PermStatus=1).first()
|
||||
tenant_uuid = sample.TenantUUID if sample else uuid.UUID(
|
||||
'00000000-0000-0000-0000-000000000001'
|
||||
).bytes
|
||||
|
||||
perm_objs = []
|
||||
for code, name, desc, cat in PERMS:
|
||||
perm = Permission.objects.filter(PermCode=code).first()
|
||||
if perm:
|
||||
self.stdout.write(f' 权限码已存在: {code}')
|
||||
if not dry_run:
|
||||
changed = False
|
||||
if perm.PermName != name:
|
||||
perm.PermName = name
|
||||
changed = True
|
||||
if (perm.PermDesc or '') != desc:
|
||||
perm.PermDesc = desc
|
||||
changed = True
|
||||
if (perm.PermCategory or '') != cat:
|
||||
perm.PermCategory = cat
|
||||
changed = True
|
||||
if changed:
|
||||
perm.save(update_fields=['PermName', 'PermDesc', 'PermCategory'])
|
||||
else:
|
||||
if dry_run:
|
||||
self.stdout.write(f'would create perm {code}')
|
||||
else:
|
||||
perm = Permission.objects.create(
|
||||
PermUUID=uuid.uuid4().bytes,
|
||||
TenantUUID=tenant_uuid,
|
||||
PermCode=code,
|
||||
PermName=name,
|
||||
PermDesc=desc,
|
||||
PermCategory=cat,
|
||||
PermStatus=1,
|
||||
CreateTime=timezone.now(),
|
||||
UpdateTime=timezone.now(),
|
||||
)
|
||||
self.stdout.write(self.style.SUCCESS(f' 已创建权限码: {code}'))
|
||||
if perm:
|
||||
perm_objs.append(perm)
|
||||
|
||||
if not role_name:
|
||||
self.stdout.write('未指定 --role-name,跳过挂角色')
|
||||
return
|
||||
|
||||
clubs = []
|
||||
if all_clubs:
|
||||
clubs = list(Club.query.filter(status=1).values_list('club_id', flat=True))
|
||||
elif club_id:
|
||||
clubs = [club_id]
|
||||
else:
|
||||
self.stdout.write(self.style.WARNING('请指定 --club-id 或 --all-clubs'))
|
||||
return
|
||||
|
||||
with transaction.atomic():
|
||||
for cid in clubs:
|
||||
roles = Role.objects.filter(RoleName=role_name, ClubID=cid, RoleStatus=1)
|
||||
if not roles.exists():
|
||||
roles = Role.objects.filter(RoleName=role_name, RoleStatus=1)
|
||||
roles = [r for r in roles if (getattr(r, 'ClubID', None) or '') == cid]
|
||||
for role in roles:
|
||||
for perm in perm_objs:
|
||||
exists = RolePermission.objects.filter(
|
||||
RoleUUID=role.RoleUUID, PermUUID=perm.PermUUID,
|
||||
).exists()
|
||||
if exists:
|
||||
self.stdout.write(f' 已挂: {cid} {role_name} <- {perm.PermCode}')
|
||||
continue
|
||||
if dry_run:
|
||||
self.stdout.write(f'would link {cid} {role_name} <- {perm.PermCode}')
|
||||
else:
|
||||
RolePermission.objects.create(
|
||||
RoleUUID=role.RoleUUID,
|
||||
PermUUID=perm.PermUUID,
|
||||
CreateTime=timezone.now(),
|
||||
)
|
||||
self.stdout.write(self.style.SUCCESS(
|
||||
f' 已挂: {cid} {role_name} <- {perm.PermCode}'
|
||||
))
|
||||
Reference in New Issue
Block a user