关于 make-app-permission
用于实现和审计 Make App 单应用权限的 Skill,涵盖 IAM 权限传输、结合 Schema 的字段访问、路由与操作守卫、安全变更载荷及权限刷新。
主要功能
- 01IAM 权限端点合同
- 02结合 Schema 的字段访问
- 03路由与操作守卫
- 04变更载荷白名单
- 05权限刷新与缓存失效
- 06一致性测试与审计
适用场景
- 01为应用添加权限检查
- 02限制新建与编辑字段
- 03测试拒绝访问及权限刷新
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ qfeius/ make-platform-skills --skill make-app-permission安装后在 Claude Code 中输入/make-app-permission确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/permission-boundaries.mdscoped-route-feedback.mdservice-principal-permission.mdsystem-field-contract.mdtesting-and-audit.mdui-permission-runtime.mdscripts/audit-make-app-permission.mjscheck-installed-skill-sync.mjspermission-conformance-suite.mjsprincipal-response-conformance-suite.mjsscoped-route-feedback-audit.mjstest-audit-make-app-permission.mjstest-installed-skill-sync.mjstest-permission-conformance-suite.mjstest-scoped-route-feedback.mjs详细介绍
make-app-permission
直接 URL 和运行时资源拒绝遵循 references/scoped-route-feedback.md:应用级守卫位于壳层之外,对象级/固定路由守卫位于壳层之内。替换整个被拒绝的业务内容,而不仅是表格行;保留已授权的导航和全局身份标头。要求添加渲染树和零拒绝请求回归测试。React 通过 makeui/references/permission-feedback.md 渲染经验证的软件包;此 Skill 决定范围和访问生命周期,不负责组件样式。对于当前 App 的人员联系方式,请阅读 make-app-auth/references/access-help.md,不要发送被拒绝的业务请求。
当请求创建、更改、审查或调试 Make App 单应用权限实施时,使用此 Skill。对于每个生成或重构的 Make App,默认必须启用此 Skill。即使请求聚焦于 UI、Service、Schema 或运行时工作,也不得省略 IAM 代理、路由守卫、权限感知 Schema 或权限审计。
此 Skill 负责权限语义。登录/会话使用 make-app-auth,Service 和 Schema 传输使用 make-app-service,渲染使用 makeui,单元格编辑器机制使用 canvas-table-integration,打包/运行时使用 make-app-runtime。
快速开始
- 检查
apps/docs/api.md、Service/UI Schema 适配器和类型、主体权限代码、providers、路由器、对象页面、新建/编辑表单、提交构建器、刷新流程和测试。 - 在选择范围、permissionKey、Schema 集合或字段访问状态之前,阅读
references/permission-boundaries.md。 - 在更改
/principal/permission或解读 IAMfieldAccess之前,阅读references/service-principal-permission.md。 - 在更改路由/操作门控、新建/读取/更新字段集、载荷过滤或刷新之前,阅读
references/ui-permission-runtime.md。 - 在实现 ID/审计新建或编辑能力之前,阅读
references/system-field-contract.md。 - 在实施之前和报告完成之前,阅读
references/testing-and-audit.md。 - 先实现测试,然后实现 Service/Schema 边界、纯权限模型、路由/操作门控、字段集使用方、提交允许列表和刷新失效处理。
- 运行宿主测试、行为一致性测试套件,以及
node skills/make-app-permission/scripts/audit-make-app-permission.mjs <project-root>。将两项权限检查接入宿主的默认测试、CI 或发布门禁;仅在本地运行一次并不构成持续门禁。 - 发布或安装此 Skill 时,使用明确的源目录和已安装目录运行
check-installed-skill-sync.mjs。若版本更新了共享的 Make 响应/身份验证/权限指南,则发布平台软件包,运行npx skills update qfeius/make-platform-skills,然后使用明确的源 Skill 根目录和已安装 Skill 根目录运行仓库范围的check-installed-make-platform-skills-sync.mjs。不要将这些本地发布检查纳入可移植的宿主 CI。
必需合同
本节的 createFields ∩ meta.field.read 规则适用于普通新建。对象有有效 bpmDefinitionKey 时,先按 make-app-approval 选择审批新建分支:UI 和 Service 均以启动配置授权字段为准,不再与普通 IAM 字段集合求交;应用、对象及新建操作权限仍保留。此例外不扩展到普通已有记录编辑,也不把“我的审批”固定导航作为业务对象菜单权限项。详细合同见 审批新建字段。
- 暴露
/api/make/app/principal/permission;让 Service 在 App 作用域下,使用MakeService.GetResource和已建立的登录上下文调用/api/make/iam/v1/principal/permission。这是直接的 Make 代理:原样返回每个已完成的 IAM 响应,包括 2xx/4xx/5xx 状态码、Content-Type 和正文。不要请求租户根作用域,也不要应用上游平台权限过滤器。严格规范化之前,依据references/permission-boundaries.md对行进行分类:仅忽略明确无关的行,并对所有选中或无法分类的行采取默认拒绝。 - 基于当前上下文解析租户,遵循
make-app-auth/references/service-fronted-mode.md#current-context-consumption。只有实际的 App 作用域 IAM 响应才是主体权限结果,而不是 auth 兼容性声明。 - IAM 线协议成功响应为
{code:200,data:{principal,scope,permissions}},不同于裸 auth 身份信息。Service 保留此响应;UI 请求适配器检查 code,并且只解包一次 data,然后再进行权限规范化。除仅 DTO 的纯模型外,还要验证生产环境 UI 加载器边界;参见references/testing-and-audit.md。 - 正确匹配精确、通配、父级、App、实体、IAM 命名空间通配 App 资源,以及拒绝规则。使用最具体的允许字段范围;拒绝优先。
- 将创建、可见性和可编辑性分别作为字段集合决策处理:
- 创建表单:
createFields ∩ meta.field.read fieldAccess(creatable|readonly|editable|partialMask|fullMask|*); - 列表/详情/筛选:
fields ∩ meta.field.read fieldAccess(readable states); - 编辑/单元格编辑:可见的
fields ∩ meta.field.update fieldAccess(editable|*)。
- 创建表单:
- 实体、字段和记录授权彼此独立:
meta.entity.read控制 Schema 中存在的实体是否显示在导航中,以及能否进入其对象路由;导航和动态路由都必须在缺少此权限时拒绝该实体。渲染业务内容时,meta.field.read控制已授权的列/表头;data.record.read控制记录/详情请求及其值。记录读取被拒绝或撤销时,不会移除经元数据授权的导航,也不会改写字段授权;但必须将当前记录读取业务内容整体替换为资源反馈。卸载其标题栏、工具栏、表头、数据和对话框,跳过被拒绝的请求,并使缓存值和过时任务失效。不要在反馈周围保留空表格外壳。 - 保留字段返回的每一种访问状态。当前 IAM 响应可能使用
["creatable", "readonly"]这样的数组,也可能使用字符串标量;将受支持的字符串标量规范化为单元素数组,并且只要某一维度有任一状态获准,就授权该权限维度。绝不要对数组使用String(value)或模板字符串插值进行强制转换。 - 将缺失的
createFields视为空。绝不要回退到fields,也不要在当前编辑行为中使用editableFields。 - 使用
data.record.create控制创建入口和提交操作:普通新建根据匹配的meta.field.read行和createFields派生字段;审批新建使用make-app-approval中获授权的启动配置字段。meta.field.create不是平台权限点,不得要求、推断或发出此权限。操作门控本身不授予字段访问权限;普通创建仍需保留字段交集,审批创建仍需保留独立的 Workflow 字段授权。分别使用各自的操作键控制更新/删除/批量更新。 - 提交前重新计算最新的创建/编辑允许列表,并据此构建载荷。绝不要将完整表单存储对象扩展到受保护的变更中。
- 将 ID 和系统审计字段排除在创建能力之外。当审计字段可见、获准更新且宿主编辑器支持时,保留现有的审计字段编辑能力。
- 仅创建时不可见的字段只能在创建模式下使用。
creatable访问状态不代表可读或可编辑。 - 添加 App/对象/固定路由守卫;隐藏菜单或按钮不等于授权。读取和变更前都要重新检查处理器。
- 在同一访问代次中刷新权限和经过权限裁剪的 Schema,然后再刷新数据。使过时的权限、Schema、表单和记录任务失效。记录读取被拒绝不会撤销独立创建路由的权限;被替换业务内容的后代仍须卸载。仅操作被拒绝时,保留获准的输入。
- 权限或 Schema 失败时默认拒绝。行级
dataCondition的执行交由后端 API。 - 权限和 Schema 请求失败时,必须通过 Provider 状态传递共享请求适配器提供的安全结构化
kind/status/title/description/traceId,直至错误出口。使用make-app-observability进行请求错误分类和卡片呈现;不要将这些失败简化为纯字符串,也不要暴露原始上游错误。被拒绝的权限结果仍是禁止状态,而不是伪造的请求失败。 - 添加 Service/schema、权限模型、路由/页面、载荷、特殊字段、刷新和负向审计测试。
参考索引
| 任务 | 阅读 |
|---|---|
| Platform 与 App 的范围、创建/读取/更新字段界面、Schema 集合、匹配 | references/permission-boundaries.md |
服务端点、IAM 请求/响应、meta.field.read.fieldAccess | references/service-principal-permission.md |
| Provider、辅助函数、路由、创建/编辑流程、负载、刷新、Lookup | references/ui-permission-runtime.md |
| 精确 ID/审计创建排除项及编辑兼容性 | references/system-field-contract.md |
| 必需测试、审计信号、完成阻塞项 | references/testing-and-audit.md |
| 身份验证/会话 | 使用 make-app-auth |
| Schema/API 传输与缓存 | 使用 make-app-service |
| 表单/空状态呈现 | 使用 makeui |
| 表格/单元格编辑器机制 | 使用 canvas-table-integration |
| 选择、行预检查、批量操作 | 使用 make-app-actions |
| 运行时网关与打包 | 使用 make-app-runtime |
审计
node skills/make-app-permission/scripts/audit-make-app-permission.mjs <project-root>
将失败视为阻塞项,将警告视为审查事项。审计采用启发式方法,不能替代运行时测试。
如果通过 String(...)、文本辅助函数、模板插值、.toString() 或 .join() 将 fieldAccess 状态数组强制转换为字符串,并且该转换后的值会影响规范化输出或权限评估(包括直接的控制流条件),审计会将其拒绝。无论参数使用通用名称还是特指 fieldAccess 的名称,命名规范化辅助函数中的诊断日志、注释和字符串字面量都不得导致审计失败。可执行行为契约仍具有最终效力。
还要提供一个精简的宿主适配器,并运行可执行行为契约:
node skills/make-app-permission/scripts/permission-conformance-suite.mjs <host-adapter-module>
还要通过连接到生产 UI 权限加载器的精简适配器,运行线级响应契约:
node skills/make-app-permission/scripts/principal-response-conformance-suite.mjs <host-loader-adapter-module>
这可保护业务代码验证、单次解包、空 IAM 授权以及保留拒绝联系人等行为;现有纯模型测试套件不会测试 SDK 响应解码。适配器契约和宿主门禁说明见 references/testing-and-audit.md。
如果适配器使用 TypeScript,请通过宿主现有的 TypeScript 运行器运行相同命令。不要仅为此检查添加运行时依赖。适配器必须委托给生产权限辅助函数和创建能力守卫;不得在测试中重新实现这些逻辑。 将审计和一致性运行器保留在项目内,或在将其设为宿主门禁之前通过有版本号的依赖安装。不要在可移植 CI 中硬编码其他工作区的检出路径或开发者主目录下的 Skill 路径。
对于本地 Skill 安装/发布验证,请比较完整的源目录和安装目录:
node skills/make-app-permission/scripts/check-installed-skill-sync.mjs \
skills/make-app-permission <installed-skill-dir>
检查器会报告仅存在于源目录、仅存在于安装目录以及内容不匹配的文件。请显式传入安装目录;不要在 Skill 或宿主 CI 中嵌入开发者主目录路径。
对于会更改共享 Service/身份验证/权限契约的发布,请先更新已安装的平台包,然后验证所有受影响的 Make App Skill:
npx skills update qfeius/make-platform-skills
node scripts/check-installed-make-platform-skills-sync.mjs \
skills <installed-skills-dir>
仅在源修订版通过平台 Skill 发布流程发布后运行此操作。这是本地发布验证,不属于可移植的宿主 CI。