背景
ADR-0092 D4 的框架侧(#2817 / PR #2832)已给 sys_user 加 userActions: { edit: true } 并对非档案字段做逐字段 readonly 治理。server 元数据正确(/api/v1/meta/object/sys_user 返回 userActions.edit=true、仅 name/image 的 readonly=false)。
问题(浏览器验证发现)
当前 vendored console(objectui @object-ui/console 14.3.0,framework 里 pin SHA 6fa8e6a)的记录表单渲染器把 protection.lock:'full' / managedBy:'better-auth' 对象的所有表单字段渲染为 readonly disabled —— 包括本应可编辑的 name/image。
现象(Setup → Users → 行菜单 Edit):
- ✅ 行菜单出现 "Edit"(
resolveCrudAffordances 正确解析了 userActions.edit)
- ✅ Edit 表单只暴露 Name + Profile Image 两个字段(只读字段正确排除)
- ❌ 但这两个字段的
<input> 带 readonly disabled 属性,无法输入 → affordance "可见但不可用"
DOM 证据:<input readonly disabled name="name" group="Identity" value="Dev Admin" schema="[object Object]">。字段 widget 的只读判定为 field.readonly || <form-level lock>;name 的 field.readonly=false,故是表单级/对象级的一刀切锁定(RecordFormPage 仅用 managedBy 渲染 badge,禁用逻辑在共享 widget 层)。
需求
记录表单渲染器应:当对象 userActions.edit === true 时,按逐字段 readonly 渲染,而非按 protection.lock / managedBy 对整个表单一刀切禁用。 protection.lock 是元数据保护(能否改 schema,ADR-0010),不应等同于记录数据只读。
联动
相关
背景
ADR-0092 D4 的框架侧(#2817 / PR #2832)已给
sys_user加userActions: { edit: true }并对非档案字段做逐字段readonly治理。server 元数据正确(/api/v1/meta/object/sys_user返回userActions.edit=true、仅name/image的readonly=false)。问题(浏览器验证发现)
当前 vendored console(objectui
@object-ui/console14.3.0,framework 里 pin SHA6fa8e6a)的记录表单渲染器把protection.lock:'full'/managedBy:'better-auth'对象的所有表单字段渲染为readonly disabled—— 包括本应可编辑的name/image。现象(Setup → Users → 行菜单 Edit):
resolveCrudAffordances正确解析了userActions.edit)<input>带readonly disabled属性,无法输入 → affordance "可见但不可用"DOM 证据:
<input readonly disabled name="name" group="Identity" value="Dev Admin" schema="[object Object]">。字段 widget 的只读判定为field.readonly || <form-level lock>;name的field.readonly=false,故是表单级/对象级的一刀切锁定(RecordFormPage仅用managedBy渲染 badge,禁用逻辑在共享 widget 层)。需求
记录表单渲染器应:当对象
userActions.edit === true时,按逐字段readonly渲染,而非按protection.lock/managedBy对整个表单一刀切禁用。protection.lock是元数据保护(能否改 schema,ADR-0010),不应等同于记录数据只读。联动
pnpm objectui:refresh更新 pin SHA + vendored bundle。相关