Skip to content

security 服务 getReadableFields 查询面(export 列投影的长期正解) #3547

Description

@os-zhuang

#3391 的独立 follow-up ④。

背景

P1 让 export 的列投影与 list 的字段级权限(FLS)对齐,方案是「从 masked 行推导」:取首块 masked 行的键并集 ∩ schema 字段,作为导出表头(packages/rest/src/rest-server.ts export 路由,#3498)。这是当时半径可控的方案,但有已知妥协:

  • 首块行里某可读字段若恰好全为 null(且驱动省略 null 键),该列表头会消失(纯外观问题)。
  • 空结果集退回全 schema 表头。

长期正解

给 security 服务加一个 getReadableFields(object, context) 查询面,直接返回该 context 下的可读字段集,export 用它做列投影,而不是从数据行反推。

为什么当时没做

REST 层只有 protocol 句柄,够不到 kernel 的 security 服务;加这个查询面 P1 半径过大。需要:

  • 在 security 服务(plugin-security)暴露 getReadableFields(object, context)(复用 FieldMasker 的可读判定,与读中间件同源,杜绝漂移)。
  • 让 REST export 路由能拿到该服务句柄(kernel 服务解析),用它替换「从 masked 行推导」。
  • 回归:导出列 = list 可读列,且不受 null 值/空结果影响。

关联:#3391#3498(现「从 masked 行推导」实现 + 阻塞性列投影测试)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions