| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- 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": "staff", "path": "/permission/roles", "components": ["add_role", "edit_role", "delete_role"]},
-
-
- # 库存管理
- {"primary_page": "stock","path": "/stock/management", "components": ["create_stock", "adjust_stock", "delete_stock"]},
- {"primary_page": "stock","path": "/stock/stocklist", "components": ["view_stock", "export_stock"]},
- {"primary_page": "stock","path": "/stock/stockbinlist", "components": ["view_bin", "edit_bin"]},
- {"primary_page": "stock","path": "/stock/emptybin", "components": ["view_empty", "mark_empty"]},
- {"primary_page": "stock","path": "/stock/occupiedbin", "components": ["view_occupied", "release_bin"]},
- {"primary_page": "stock","path": "/stock/binset", "components": ["add_bin", "edit_bin", "delete_bin"]},
- {"primary_page": "stock","path": "/stock/handcount", "components": ["start_count", "record_count", "finish_count"]},
- # ERP管理
- {"primary_page": "erp","path": "/erp/erpasn", "components": ["create_asn", "edit_asn", "delete_asn"]},
- {"primary_page": "erp","path": "/erp/erpasnmaterial", "components": ["add_material", "edit_material", "delete_material"]},
- {"primary_page": "erp","path": "/erp/erpdnmaterial", "components": ["add_dn_material", "edit_dn_material", "delete_dn_material"]},
- {"primary_page": "erp","path": "/erp/erpasnaudit", "components": ["approve_asn", "reject_asn"]},
- {"primary_page": "erp","path": "/erp/erpdn", "components": ["create_dn", "edit_dn", "delete_dn"]},
- {"primary_page": "erp","path": "/erp/erpsortstock", "components": ["view_sorted", "export_sorted"]},
-
- # 入库管理
- {"primary_page": "inbound","path": "/inbound/asn", "components": ["create_asn", "edit_asn", "delete_asn"]},
- {"primary_page": "inbound","path": "/inbound/predeliverystock", "components": ["view_pre_delivery", "confirm_delivery"]},
- {"primary_page": "inbound","path": "/inbound/preloadstock", "components": ["view_pre_load", "confirm_load"]},
- {"primary_page": "inbound","path": "/inbound/presortstock", "components": ["view_pre_sort", "confirm_sort"]},
- {"primary_page": "inbound","path": "/inbound/sortstock", "components": ["view_sorted", "export_sorted"]},
- {"primary_page": "inbound","path": "/inbound/shortage", "components": ["report_shortage", "resolve_shortage"]},
- {"primary_page": "inbound","path": "/inbound/more", "components": ["view_additional", "add_additional"]},
- {"primary_page": "inbound","path": "/inbound/asnfinish", "components": ["confirm_finish", "export_finish"]},
- # 容器管理
- {"primary_page":"container","path": "/container/containerlist", "components": ["view_container", "add_container"]},
- {"primary_page":"container","path": "/container/containerdetail", "components": ["view_detail", "edit_detail"]},
- {"primary_page":"container","path": "/container/containercategory", "components": ["view_category", "add_category"]},
- {"primary_page":"container","path": "/container/containeroperate", "components": ["operate_container", "confirm_operation"]},
- # 仪表盘
- {"primary_page": "dashboard","path": "/dashboard/inboundAndOutbound", "components": ["view_chart", "export_data"]},
- {"primary_page": "dashboard","path": "/dashboard/flows_statements", "components": ["view_flow", "filter_flow"]},
- {"primary_page": "dashboard","path": "/dashboard/flows", "components": ["view_flow_detail", "export_flow"]},
- {"primary_page": "dashboard","path": "/dashboard/flows_complex", "components": ["view_complex_flow", "analyze_flow"]},
- {"primary_page": "dashboard","path": "/dashboard/batchlog", "components": ["view_log", "search_log"]},
- {"primary_page": "dashboard","path": "/dashboard/ContainerDetailLogModel", "components": ["view_container_log", "export_log"]},
- {"primary_page": "dashboard","path": "/dashboard/MaterialChangeHistory", "components": ["view_history", "compare_history"]},
-
-
-
- # 统计管理
- {"primary_page":"count","path": "/count/detaillog", "components": ["view_log", "search_log"]},
- {"primary_page":"count","path": "/count/batchoperatelog", "components": ["view_batch_log", "export_log"]},
- {"primary_page":"count","path": "/count/countbatchlog", "components": ["view_count_log", "analyze_log"]},
- {"primary_page":"count","path": "/count/presortstock", "components": ["view_pre_sort", "export_pre_sort"]},
- {"primary_page":"count","path": "/count/sortstock", "components": ["view_sorted", "export_sorted"]},
- {"primary_page":"count","path": "/count/shortage", "components": ["view_shortage", "resolve_shortage"]},
- {"primary_page":"count","path": "/count/containerDetail", "components": ["view_container", "export_container"]},
- {"primary_page":"count","path": "/count/batch", "components": ["view_batch", "manage_batch"]},
- {"primary_page":"count","path": "/count/asnfinish", "components": ["view_finish", "export_finish"]},
-
-
- # 出库管理
- {"primary_page":"outbound","path": "/outbound/dn", "components": ["create_dn", "edit_dn", "delete_dn"]},
- {"primary_page":"outbound","path": "/outbound/freshorder", "components": ["view_fresh", "process_fresh"]},
- {"primary_page":"outbound","path": "/outbound/neworder", "components": ["view_new", "process_new"]},
- {"primary_page":"outbound","path": "/outbound/pickstock", "components": ["view_pick", "confirm_pick"]},
- {"primary_page":"outbound","path": "/outbound/pickedstock", "components": ["view_picked", "confirm_picked"]},
- {"primary_page":"outbound","path": "/outbound/pickinglist", "components": ["view_list", "export_list"]},
- {"primary_page":"outbound","path": "/outbound/shippedstock", "components": ["view_shipped", "confirm_shipped"]},
- {"primary_page":"outbound","path": "/outbound/backorder", "components": ["view_backorder", "process_backorder"]},
- {"primary_page":"outbound","path": "/outbound/pod", "components": ["view_pod", "confirm_pod"]},
- {"primary_page":"outbound","path": "/outbound/container_check", "components": ["check_container", "confirm_check"]},
-
- # 商品管理
- {"primary_page":"goods","path": "/goods/goodslist", "components": ["view_goods", "add_goods"]},
- {"primary_page":"goods","path": "/goods/goodsunit", "components": ["view_unit", "add_unit"]},
- {"primary_page":"goods","path": "/goods/goodsclass", "components": ["view_class", "add_class"]},
- {"primary_page":"goods","path": "/goods/goodsbrand", "components": ["view_brand", "add_brand"]},
- {"primary_page":"goods","path": "/goods/goodscolor", "components": ["view_color", "add_color"]},
- {"primary_page":"goods","path": "/goods/goodsspecs", "components": ["view_specs", "add_specs"]},
- {"primary_page":"goods","path": "/goods/goodsshape", "components": ["view_shape", "add_shape"]},
- {"primary_page":"goods","path": "/goods/goodsorigin", "components": ["view_origin", "add_origin"]},
-
- # 任务管理
- {"primary_page":"taskpage","path": "/taskpage/task", "components": ["view_task", "create_task", "assign_task"]},
-
- # 仓库管理
- {"primary_page":"warehouse","path": "/warehouse/warehouseset", "components": ["view_setting", "edit_setting"]},
- {"primary_page":"warehouse","path": "/warehouse/department", "components": ["view_department", "add_department"]},
- {"primary_page":"warehouse","path": "/warehouse/boundcodetype", "components": ["view_code_type", "add_code_type"]},
- {"primary_page":"warehouse","path": "/warehouse/boundtype", "components": ["view_bound_type", "add_bound_type"]},
- {"primary_page":"warehouse","path": "/warehouse/boundbusiness", "components": ["view_business", "add_business"]},
- {"primary_page":"warehouse","path": "/warehouse/status", "components": ["view_status", "edit_status"]},
- {"primary_page":"warehouse","path": "/warehouse/product", "components": ["view_product", "add_product"]},
-
- # 员工管理
- {"primary_page":"staff","path": "/staff/stafflist", "components": ["view_staff", "add_staff"]},
- {"primary_page":"staff","path": "/staff/stafflist_check_code", "components": ["check_code", "reset_code"]},
- {"primary_page":"staff","path": "/staff/stafftype", "components": ["view_type", "add_type"]},
-
- # 上传中心
- {"primary_page":"uploadcenter","path": "/uploadcenter/initializeupload", "components": ["init_upload", "process_init"]},
- {"primary_page":"uploadcenter","path": "/uploadcenter/addupload", "components": ["add_upload", "process_add"]},
-
- # 下载中心
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadinbound", "components": ["download_inbound"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadoutbound", "components": ["download_outbound"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadstocklist", "components": ["download_stock"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadgoodslist", "components": ["download_goods"]},
- {"primary_page":"downloadcenter","path": "/downloadcenter/downloadbinlist", "components": ["download_bin"]},
- ]
- # 定义角色及其权限配置
- ROLES = {
- "管理员": {
- "description": "系统管理员,拥有所有权限",
- "page_access": "all", # 所有页面
- "component_access": "all" # 所有组件
- },
- "经理": {
- "description": "部门经理,拥有大部分管理权限",
- "page_access": [
- "/dashboard", "/stock", "/inbound", "/outbound",
- "/count", "/container", "/goods", "/warehouse", "/staff"
- ],
- "component_access": "all" # 所有组件
- },
- "主管": {
- "description": "仓库主管,负责日常运营管理",
- "page_access": [
- "/stock", "/inbound", "/outbound", "/count", "/container"
- ],
- "component_access": [
- "view", "edit", "add", "delete", "export", "confirm"
- ]
- },
- "操作员": {
- "description": "仓库操作员,负责具体操作",
- "page_access": [
- "/stock/stocklist", "/stock/stockbinlist", "/inbound/asn",
- "/outbound/pickstock", "/outbound/pickedstock"
- ],
- "component_access": [
- "view", "confirm", "process"
- ]
- },
- "查看员": {
- "description": "数据查看员,只能查看数据",
- "page_access": [
- "/dashboard", "/stock/stocklist", "/count/detaillog", "/count","/erp"
- ],
- "component_access": ["view"]
- }
- }
- 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__startswith=page_path,
- component=None
- )
- assigned_permissions.extend(page_perms)
-
- # 获取匹配该路径的组件权限
- comp_perms = all_permissions.filter(
- page__startswith=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()
|