import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') django.setup() from users.models import Permission, Role, RolePermission def seed(): print("--- 正在初始化预设角色与页面权限数据 ---") # 1. 预设角色 roles_data = [ {"code": "ADMIN", "name": "管理员", "description": "系统超级管理员", "is_system": True}, {"code": "USER", "name": "普通用户", "description": "平台普通注册用户", "is_system": True}, {"code": "ENTERPRISE", "name": "企业用户", "description": "已入驻企业账号及团队成员", "is_system": True}, {"code": "OPC_USER", "name": "OPC 专家", "description": "已通过 OPC 认证的专家", "is_system": True}, ] for rd in roles_data: Role.objects.update_or_create(code=rd["code"], defaults=rd) # 2. 预设页面菜单节点 admin_menus = [ "menu:business:tasks", "menu:business:tasks:publish", "menu:business:enterprises", "menu:account:users", "menu:business:certs", "menu:business:enterprise_certs", "menu:account:user_manage", "menu:account:roles", "menu:settings:announcements", "menu:settings:skills", "menu:business:models", "menu:business:screen", ] ent_menus = [ "menu:ent:dashboard", "menu:ent:tasks", "menu:ent:tasks:create", "menu:ent:team", "menu:ent:opc_users", "menu:ent:invitations", "menu:ent:verification", "menu:ent:profile", "menu:ent:settings", ] user_menus = [ "menu:user:dashboard", "menu:user:tasks", "menu:user:my_tasks", "menu:user:invitations", "menu:user:announcements", "menu:user:certification", "menu:user:profile", "menu:user:settings", ] all_menus = admin_menus + ent_menus + user_menus # Create root menus for menu_code in all_menus: parts = menu_code.split(":") for i in range(1, len(parts) + 1): parent_code = ":".join(parts[:i]) Permission.objects.get_or_create( code=parent_code, defaults={"name": parent_code, "type": "MENU"} ) # 3. 分配权限 admin_role = Role.objects.get(code="ADMIN") ent_role = Role.objects.get(code="ENTERPRISE") user_role = Role.objects.get(code="USER") opc_role = Role.objects.get(code="OPC_USER") # Clear old menu permissions to reset cleanly RolePermission.objects.filter(permission__type='MENU').delete() def assign_perms(role, menu_list): perms_to_add = [] for menu_code in menu_list: parts = menu_code.split(":") for i in range(1, len(parts) + 1): parent_code = ":".join(parts[:i]) perms_to_add.append(parent_code) perms = Permission.objects.filter(code__in=perms_to_add) for p in perms: RolePermission.objects.get_or_create(role=role, permission=p) assign_perms(admin_role, admin_menus) assign_perms(ent_role, ent_menus) assign_perms(user_role, user_menus) assign_perms(opc_role, user_menus) print("角色与页面权限预设完成!") if __name__ == '__main__': seed()