fix: 修复全局字段权限导致数据显示为空的问题
根因: /permissions/role/<role_code> 接口要求 system_permission, 非管理员角色无法获取自身权限 → 权限数组为空 → 前后端字段全被过滤 修复: - permission.py: 查自己角色不再需要 system_permission, 解除权限死锁 - 5个 inbound API: 恢复完整 field_to_perm 映射, 每个字段均可独立权限管控 - 补齐遗漏字段(qty_inbound/qty_stock/qty_available/request_id/request_no) - buy.vue: 入库表单价格字段加入 hasFormFieldPermission 守卫
This commit is contained in:
@ -34,44 +34,69 @@ def get_current_user_permissions():
|
||||
|
||||
def filter_item_by_permissions(item_dict, user_permissions):
|
||||
"""
|
||||
根据用户权限过滤 item 字典,无权限的字段值置为 None
|
||||
根据用户权限过滤字段,无权限的字段值置为 None。
|
||||
所有字段均可通过权限码独立控制。
|
||||
"""
|
||||
# 字段名到权限码的映射(与前端 permissionMap 保持一致)
|
||||
# 字段名 → 权限码(与前端 permissionMap、数据库 sys_element/sys_menu 保持一致)
|
||||
field_to_perm = {
|
||||
# 基础身份
|
||||
'id': 'inbound_buy:id',
|
||||
'base_id': 'inbound_buy:base_id',
|
||||
'global_print_id': 'inbound_buy:global_print_id',
|
||||
'sku': 'inbound_buy:sku',
|
||||
'barcode': 'inbound_buy:barcode',
|
||||
'in_date': 'inbound_buy:in_date',
|
||||
'serial_number': 'inbound_buy:sn_bn',
|
||||
'batch_number': 'inbound_buy:sn_bn',
|
||||
'status': 'inbound_buy:status',
|
||||
'in_quantity': 'inbound_buy:in_quantity',
|
||||
'stock_quantity': 'inbound_buy:stock_quantity',
|
||||
'available_quantity': 'inbound_buy:available_quantity',
|
||||
'inspection_status': 'inbound_buy:inspection_status',
|
||||
'warehouse_location': 'inbound_buy:warehouse_location',
|
||||
'unit_price': 'inbound_buy:unit_price',
|
||||
'post_tax_unit_price': 'inbound_buy:post_tax_unit_price',
|
||||
'tax_rate': 'inbound_buy:tax_rate',
|
||||
'total_price': 'inbound_buy:total_price',
|
||||
'currency': 'inbound_buy:currency',
|
||||
'exchange_rate': 'inbound_buy:exchange_rate',
|
||||
'supplier_name': 'inbound_buy:supplier_name',
|
||||
'buyer_name': 'inbound_buy:buyer_name',
|
||||
'buyer_email': 'inbound_buy:buyer_email',
|
||||
'original_link': 'inbound_buy:original_link',
|
||||
'detail_link': 'inbound_buy:detail_link',
|
||||
'arrival_photo': 'inbound_buy:arrival_photo',
|
||||
'inspection_report': 'inbound_buy:inspection_report',
|
||||
'global_print_id_str': 'inbound_buy:global_print_id',
|
||||
'company_name': 'inbound_buy:company_name',
|
||||
'material_name': 'inbound_buy:material_name',
|
||||
'spec_model': 'inbound_buy:spec_model',
|
||||
'category': 'inbound_buy:category',
|
||||
'unit': 'inbound_buy:unit',
|
||||
'material_type': 'inbound_buy:material_type',
|
||||
'company_name': 'inbound_buy:company_name',
|
||||
'isInspectionRequired': 'inbound_buy:isInspectionRequired',
|
||||
# 入库身份
|
||||
'sku': 'inbound_buy:sku',
|
||||
'inbound_date': 'inbound_buy:inbound_date',
|
||||
'barcode': 'inbound_buy:barcode',
|
||||
'serial_number': 'inbound_buy:sn_bn',
|
||||
'batch_number': 'inbound_buy:sn_bn',
|
||||
'warehouse_loc': 'inbound_buy:warehouse_loc',
|
||||
'warehouse_location': 'inbound_buy:warehouse_loc',
|
||||
# 状态
|
||||
'status': 'inbound_buy:status',
|
||||
'inspection_status': 'inbound_buy:inspection_status',
|
||||
# 数量(三组命名,覆盖 model to_dict 中所有 key)
|
||||
'in_quantity': 'inbound_buy:in_quantity',
|
||||
'qty_inbound': 'inbound_buy:in_quantity',
|
||||
'stock_quantity': 'inbound_buy:stock_quantity',
|
||||
'qty_stock': 'inbound_buy:stock_quantity',
|
||||
'available_quantity': 'inbound_buy:available_quantity',
|
||||
'qty_available': 'inbound_buy:available_quantity',
|
||||
# 价格
|
||||
'unit_price': 'inbound_buy:unit_price',
|
||||
'post_tax_unit_price': 'inbound_buy:post_tax_unit_price',
|
||||
'total_price': 'inbound_buy:total_price',
|
||||
'tax_rate': 'inbound_buy:tax_rate',
|
||||
'currency': 'inbound_buy:currency',
|
||||
'exchange_rate': 'inbound_buy:exchange_rate',
|
||||
# 商务
|
||||
'supplier_name': 'inbound_buy:supplier_name',
|
||||
'purchaser': 'inbound_buy:purchaser',
|
||||
'purchaser_email': 'inbound_buy:purchaser_email',
|
||||
'source_link': 'inbound_buy:source_link',
|
||||
'detail_link': 'inbound_buy:detail_link',
|
||||
# 图片/附件
|
||||
'arrival_photo': 'inbound_buy:arrival_photo',
|
||||
'inspection_report': 'inbound_buy:inspection_report',
|
||||
# 采购单关联
|
||||
'request_id': 'inbound_buy:request_id',
|
||||
'request_no': 'inbound_buy:request_no',
|
||||
}
|
||||
# 通配符(SUPER_ADMIN)不过滤
|
||||
if 'inbound_buy:*' in user_permissions:
|
||||
return item_dict
|
||||
for field, perm_code in field_to_perm.items():
|
||||
base_perm_code = perm_code.split(':')[-1] if ':' in perm_code else perm_code
|
||||
if field in item_dict and perm_code not in user_permissions and base_perm_code not in user_permissions:
|
||||
item_dict[field] = None
|
||||
return item_dict
|
||||
# 如果用户是超级管理员且有 'inbound_buy:*',则不过滤
|
||||
if 'inbound_buy:*' in user_permissions:
|
||||
return item_dict
|
||||
|
||||
Reference in New Issue
Block a user