mcpField
M
make-app-permission

make-app-permission

github.com/qfeius安全0253 次安装3 天前更新
代码仓库

关于 make-app-permission

用于实现和审计 Make App 单应用权限的 Skill,涵盖 IAM 权限传输、结合 Schema 的字段访问、路由与操作守卫、安全变更载荷及权限刷新。

主要功能

  1. 01IAM 权限端点合同
  2. 02结合 Schema 的字段访问
  3. 03路由与操作守卫
  4. 04变更载荷白名单
  5. 05权限刷新与缓存失效
  6. 06一致性测试与审计

适用场景

  1. 01为应用添加权限检查
  2. 02限制新建与编辑字段
  3. 03测试拒绝访问及权限刷新

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/qfeius/make-platform-skills --skill make-app-permission

安装后在 Claude Code 中输入/make-app-permission确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
permission-boundaries.md
scoped-route-feedback.md
service-principal-permission.md
system-field-contract.md
testing-and-audit.md
ui-permission-runtime.md
scripts/
audit-make-app-permission.mjs
check-installed-skill-sync.mjs
permission-conformance-suite.mjs
principal-response-conformance-suite.mjs
scoped-route-feedback-audit.mjs
test-audit-make-app-permission.mjs
test-installed-skill-sync.mjs
test-permission-conformance-suite.mjs
test-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。

快速开始

  1. 检查 apps/docs/api.md、Service/UI Schema 适配器和类型、主体权限代码、providers、路由器、对象页面、新建/编辑表单、提交构建器、刷新流程和测试。
  2. 在选择范围、permissionKey、Schema 集合或字段访问状态之前,阅读 references/permission-boundaries.md。
  3. 在更改 /principal/permission 或解读 IAM fieldAccess 之前,阅读 references/service-principal-permission.md。
  4. 在更改路由/操作门控、新建/读取/更新字段集、载荷过滤或刷新之前,阅读 references/ui-permission-runtime.md。
  5. 在实现 ID/审计新建或编辑能力之前,阅读 references/system-field-contract.md。
  6. 在实施之前和报告完成之前,阅读 references/testing-and-audit.md。
  7. 先实现测试,然后实现 Service/Schema 边界、纯权限模型、路由/操作门控、字段集使用方、提交允许列表和刷新失效处理。
  8. 运行宿主测试、行为一致性测试套件,以及 node skills/make-app-permission/scripts/audit-make-app-permission.mjs <project-root>。将两项权限检查接入宿主的默认测试、CI 或发布门禁;仅在本地运行一次并不构成持续门禁。
  9. 发布或安装此 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.fieldAccessreferences/service-principal-permission.md
Provider、辅助函数、路由、创建/编辑流程、负载、刷新、Lookupreferences/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。

评论

支持 Markdown