| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 | import osimport djangoimport randomfrom datetime import datetimeimport sysdef 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_countdef 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_countdef 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()
 |