| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- import os
- import django
- import random
- from datetime import datetime
- import sys
- def setup_django():
- """设置Django环境"""
- project_path = "D:/Document/code/vue/greater_wms"
- # project_path = "D:/code/vue/greater_wms"
- sys.path.append(project_path)
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'greaterwms.settings')
- django.setup()
- print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Django环境已设置")
- # 定义系统中的页面和组件
- PAGES = [
- # 库存管理
- {"primary_page": "stock","path": "/stock/management", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/stocklist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/stockbinlist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/emptybin", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/occupiedbin", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/binset", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "stock","path": "/stock/handcount", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- # ERP管理
- {"primary_page": "erp","path": "/erp/erpasn", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "erp","path": "/erp/erpasnmaterial", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "erp","path": "/erp/erpdnmaterial", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "erp","path": "/erp/erpasnaudit", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "erp","path": "/erp/erpdn", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "erp","path": "/erp/erpsortstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 入库管理
- {"primary_page": "inbound","path": "/inbound/asn", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/predeliverystock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/preloadstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/presortstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/sortstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/shortage", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/more", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "inbound","path": "/inbound/asnfinish", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- # 托盘管理
- {"primary_page":"container","path": "/container/containerlist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"container","path": "/container/containerdetail", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"container","path": "/container/containercategory", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"container","path": "/container/containeroperate", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 仪表盘
- {"primary_page": "dashboard","path": "/dashboard/inboundAndOutbound", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/flows_statements", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/flows", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/flows_complex", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/batchlog", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/ContainerDetailLogModel", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page": "dashboard","path": "/dashboard/MaterialChangeHistory", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 统计管理
- {"primary_page":"count","path": "/count/detaillog", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/batchoperatelog", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/countbatchlog", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/presortstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/sortstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/shortage", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/containerDetail", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/batch", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"count","path": "/count/asnfinish", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 出库管理
- {"primary_page":"outbound","path": "/outbound/dn", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/freshorder", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/neworder", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/pickstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/pickedstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/pickinglist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/shippedstock", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/backorder", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/pod", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"outbound","path": "/outbound/container_check", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 商品管理
- {"primary_page":"goods","path": "/goods/goodslist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsunit", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsclass", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsbrand", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodscolor", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsspecs", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsshape", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"goods","path": "/goods/goodsorigin", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 任务管理
- {"primary_page":"taskpage","path": "/taskpage/task", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 仓库管理
- {"primary_page":"warehouse","path": "/warehouse/warehouseset", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/department", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/boundcodetype", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/boundtype", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/boundbusiness", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/status", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"warehouse","path": "/warehouse/product", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 员工管理
- {"primary_page": "staff", "path": "/permission/roles", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"staff","path": "/staff/stafflist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"staff","path": "/staff/stafflist_check_code", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"staff","path": "/staff/stafftype", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 上传中心
- {"primary_page":"uploadcenter","path": "/uploadcenter/initializeupload", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"uploadcenter","path": "/uploadcenter/addupload", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
-
- # 下载中心
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadinbound", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadoutbound", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadstocklist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadgoodslist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadbinlist", "components": ["view", "edit", "add", "delete", "export", "confirm","adjust","download"]},
- ]
- # 定义角色及其权限配置
- ROLES = {
- "管理员": {
- "description": "系统管理员,拥有所有权限",
- "page_access": "all", # 所有页面
- "component_access": "all" # 所有组件
- },
- "经理": {
- "description": "部门经理,拥有大部分管理权限",
- "page_access": [
- "/stock/management","/stock/stockbinlist","/stock/stocklist",
- "/erp/erpasn","/erp/erpasnmaterial","/erp/erpdnmaterial","/erp/erpdn","/erp/erpsortstock",
- "/inbound/asn","/inbound/predeliverystock","/inbound/sortstock",
- "/container/containerlist","/container/containerdetail","/container/containercategory","/container/containeroperate",
- "/outbound/dn","/outbound/backorder","/outbound/container_check",
- "/taskpage/task",
- "/count/batch","/count/countbatchlog","/count/detaillog","/count/batchoperatelog",
- "/dashboard/flows_statements","/dashboard/flows","/dashboard/MaterialChangeHistory","/dashboard/batchlog","/dashboard/ContainerDetailLogModel",
- "/warehouse/department","/warehouse/boundcodetype","/warehouse/boundtype","/warehouse/boundbusiness","/warehouse/status","/warehouse/product",
- "/staff/stafflist","/staff/stafflist_check_code","/staff/stafftype"
- ],
- "component_access": "all" # 所有组件
- },
- "主管": {
- "description": "仓库主管,负责日常运营管理",
- "page_access": [
- "/stock/management","/stock/stockbinlist","/stock/stocklist",
- "/erp/erpasn","/erp/erpasnmaterial","/erp/erpdnmaterial","/erp/erpdn","/erp/erpsortstock",
- "/inbound/asn","/inbound/predeliverystock","/inbound/sortstock",
- "/container/containerlist","/container/containerdetail","/container/containercategory",
- "/outbound/dn","/outbound/backorder","/outbound/container_check",
- "/taskpage/task",
- "/count/batch","/count/countbatchlog","/count/detaillog","/count/batchoperatelog",
- "/dashboard/flows_statements","/dashboard/flows","/dashboard/MaterialChangeHistory","/dashboard/batchlog","/dashboard/ContainerDetailLogModel",
- # "/warehouse/department","/warehouse/boundcodetype","/warehouse/boundtype","/warehouse/boundbusiness","/warehouse/status","/warehouse/product",
- "/staff/stafflist","/staff/stafftype"
- ],
- "component_access": [
- "view", "edit", "add", "delete", "export", "confirm","adjust","download"
- ]
- },
- "操作员": {
- "description": "仓库操作员,负责具体操作",
- "page_access": [
- "/stock/management","/stock/stockbinlist","/stock/stocklist",
- "/erp/erpasn","/erp/erpasnmaterial","/erp/erpdnmaterial","/erp/erpdn","/erp/erpsortstock",
- "/inbound/asn","/inbound/predeliverystock","/inbound/sortstock",
- "/container/containerlist","/container/containercategory",
- "/outbound/dn","/outbound/backorder","/outbound/container_check",
- "/taskpage/task",
- "/count/batch","/count/countbatchlog","/count/detaillog","/count/batchoperatelog",
- "/dashboard/flows_statements","/dashboard/flows"
- # "/warehouse/department","/warehouse/boundcodetype","/warehouse/boundtype","/warehouse/boundbusiness","/warehouse/status","/warehouse/product",
- # "/staff/stafflist","/staff/stafftype"
- ],
- "component_access": [
- "view", "edit", "add","download","confirm"
- ]
- },
- "查看员": {
- "description": "数据查看员,只能查看数据",
- "page_access": [
- "/stock/management","/stock/stockbinlist",
- "/erp/erpasn","/erp/erpasnmaterial","/erp/erpdnmaterial","/erp/erpdn","/erp/erpsortstock",
- "/inbound/asn","/inbound/predeliverystock","/inbound/sortstock",
- "/container/containerlist","/container/containercategory",
- "/outbound/dn","/outbound/backorder","/outbound/container_check",
- "/taskpage/task",
- "/count/batch","/count/countbatchlog","/count/detaillog","/count/batchoperatelog",
- "/dashboard/flows_statements","/dashboard/flows"
- # "/warehouse/department","/warehouse/boundcodetype","/warehouse/boundtype","/warehouse/boundbusiness","/warehouse/status","/warehouse/product",
- # "/staff/stafflist","/staff/stafftype"
- ],
- "component_access": ["view","download"]
- }
- }
- def create_permissions():
- """创建所有页面和组件的权限"""
- from staff.models import Permission
- print("🚀 开始创建权限...")
- created_count = 0
-
- for page_info in PAGES:
- primary_page = page_info.get("primary_page")
-
- page_path = page_info["path"]
- components = page_info["components"]
-
- # 创建页面访问权限
- page_permission, created = Permission.objects.get_or_create(
- primary_page=primary_page,
- page=page_path,
- component=None,
- defaults={
- "name": f"{page_path} 页面访问",
- "description": f"访问 {page_path} 页面的权限",
- "enabled": True
- }
- )
- if created:
- created_count += 1
- print(f"✅ 创建页面权限: {page_path}")
-
- # 创建组件权限
- for component in components:
- comp_permission, created = Permission.objects.get_or_create(
- primary_page=primary_page,
- page=page_path,
- component=component,
- defaults={
- "name": f"{page_path} - {component} 组件",
- "description": f"在 {page_path} 页面使用 {component} 组件的权限",
- "enabled": True
- }
- )
- if created:
- created_count += 1
- print(f" ✅ 创建组件权限: {page_path} - {component}")
-
- print(f"📊 权限创建完成! 共创建 {created_count} 个权限")
- return created_count
- def create_roles_and_assign_permissions():
- """创建角色并分配权限"""
- from staff.models import ListModel, Permission, Role
- print("\n🚀 开始创建角色并分配权限...")
- role_count = 0
- permission_count = 0
-
- # 获取所有权限
- all_permissions = Permission.objects.all()
-
- for role_name, role_config in ROLES.items():
- # 创建角色
- role, created = Role.objects.get_or_create(
- name=role_name,
- defaults={
- "description": role_config["description"]
- }
- )
-
- if role:
- role_count += 1
- print(f"✅ 创建角色: {role_name}")
-
- # 分配权限
- if role_config["page_access"] == "all":
- # 分配所有权限
- role.permissions.set(all_permissions)
- permission_count += all_permissions.count()
- print(f" 🔄 分配所有权限 ({all_permissions.count()} 个)")
- else:
- # 分配特定权限
- assigned_permissions = []
-
- # 处理页面访问权限
- for page_path in role_config["page_access"]:
- # 获取精确匹配该路径的所有页面权限
- page_perms = all_permissions.filter(
- page=page_path, # 使用精确匹配
- component=None
- )
- assigned_permissions.extend(page_perms)
-
- # 获取精确匹配该路径的组件权限
- comp_perms = all_permissions.filter(
- page=page_path, # 使用精确匹配
- component__isnull=False
- )
-
- # 根据组件访问规则过滤
- if role_config["component_access"] == "all":
- assigned_permissions.extend(comp_perms)
- else:
- for perm in comp_perms:
- # 检查组件权限是否在允许的列表中
- if any(access in perm.component for access in role_config["component_access"]):
- assigned_permissions.append(perm)
-
- # 分配权限
- role.permissions.set(assigned_permissions)
- permission_count += len(assigned_permissions)
- print(f" 🔄 分配 {len(assigned_permissions)} 个权限")
-
- print(f"📊 角色创建完成! 共创建 {role_count} 个角色,分配 {permission_count} 个权限")
- return role_count, permission_count
- def main():
- setup_django()
- print("=" * 50)
- print("🔐 权限与角色批量创建工具")
- print("=" * 50)
- print("此脚本将根据预定义的页面和角色配置批量创建:")
- print("1. 所有页面的访问权限")
- print("2. 所有组件的操作权限")
- print("3. 不同角色的权限配置")
- print("=" * 50)
-
- confirm = input("是否开始批量创建? (y/n): ").lower()
- if confirm == 'y':
- start_time = datetime.now()
-
- # 创建权限
- perm_count = create_permissions()
-
- # 创建角色并分配权限
- role_count, perm_assigned_count = create_roles_and_assign_permissions()
-
- end_time = datetime.now()
- duration = (end_time - start_time).total_seconds()
-
- print("\n" + "=" * 50)
- print("🎉 批量创建完成!")
- print(f"⏱️ 耗时: {duration:.2f} 秒")
- print(f"✅ 创建权限: {perm_count} 个")
- print(f"👥 创建角色: {role_count} 个")
- print(f"🔗 分配权限: {perm_assigned_count} 次")
- print("=" * 50)
- else:
- print("操作已取消")
- if __name__ == "__main__":
- main()
|