diff --git a/inventory-backend/app/services/permission_service.py b/inventory-backend/app/services/permission_service.py index 18c37cf..4ddaf65 100644 --- a/inventory-backend/app/services/permission_service.py +++ b/inventory-backend/app/services/permission_service.py @@ -130,13 +130,20 @@ class PermissionService: session = db.session try: - # 1. 删除该角色+该公司的旧权限(只删同公司的,不影响全局模板和其他公司) + # 1. 删除该角色的旧权限 + # 删除逻辑需与 get_user_permissions 的查询逻辑对齐: + # - company_name 为空 → 删 company_name IS NULL OR ''(超管/全局模板) + # - company_name 有值 → 删 公司定制 + 全局模板(确保能完整替换) if company_name: - old_perms = SysRolePermission.query.filter_by( - role_code=role_code, company_name=company_name + old_perms = SysRolePermission.query.filter( + SysRolePermission.role_code == role_code, + or_( + SysRolePermission.company_name == company_name, + SysRolePermission.company_name.is_(None), + SysRolePermission.company_name == '', + ) ).all() else: - # 公司为空时兼容旧逻辑:删除 company_name 为 NULL 的旧权限 old_perms = SysRolePermission.query.filter( SysRolePermission.role_code == role_code, or_(