forked from EduCraft/curriculum-project-hub
3ebe4b754d
Remove filler/redundant patterns: 钉死/钉, 本模块, likec4 画不出/画得出, 臆造, 散文, 分歧点测试, 纯 plumbing, 恰好, 留白, 宪法第N条, 刻意. No code definitions changed, only doc comments.
68 lines
3.3 KiB
Lean4
68 lines
3.3 KiB
Lean4
import Spec.Prelude
|
||
import Spec.System.Permission
|
||
|
||
/-!
|
||
# PermissionGrant —— 授权与设置(ADR-0004)
|
||
|
||
ADR-0004 的"飞书云文档式"权限:grant(`resource × principal × role`)与 settings
|
||
(各 policy 旋钮)分离;role 决定能力(见 `Permission`),settings 决定"此资源是否
|
||
开某类操作"。
|
||
|
||
principal 子类型学(user/chat/department/…)与各 policy 值域 `OPEN`。role-capability
|
||
与 settings-policy 如何组合成最终授权决策亦 `OPEN`——ADR-0004 把二者列为分离的闸,
|
||
但未明文规定组合规则。ADR-0020 约束 TEAM principal 授权 PROJECT resource 时必须同
|
||
organization,见 `Spec.System.Organization`。
|
||
-/
|
||
|
||
namespace Spec.System
|
||
|
||
variable (I : Identifiers)
|
||
variable (ArtifactId Policy : Type)
|
||
|
||
/-- 受权限调控的资源(`PINNED` 三类, ADR-0004 `resource_type: project | artifact |
|
||
project_group`);每类携带其 id,故 resource_id 由 resource_type 决定(结构无洞)。 -/
|
||
inductive Resource where
|
||
/-- 课程项目(`PINNED` 类别, ADR-0004)。 -/
|
||
| project : I.ProjectId → Resource
|
||
/-- 教研产物(`PINNED` 类别, ADR-0004;id 表示 `OPEN`,语义向 Courseware 半边对齐)。 -/
|
||
| artifact : ArtifactId → Resource
|
||
/-- 飞书项目群(`PINNED` 类别, ADR-0004 `project_group`;chat 标识见
|
||
`Identifiers.ChatId`,绑定见 `ProjectGroup`)。 -/
|
||
| projectGroup : I.ChatId → Resource
|
||
|
||
/-- 授权项(`PINNED` 结构, ADR-0004 `PermissionGrant`):把一个 role 授予一个 principal 对
|
||
某个 resource。role 取自 `Permission.Role`(read/edit/manage 累积格)。principal 表示
|
||
`OPEN`(子类型学未定,见 `Identifiers.Principal`)。 -/
|
||
structure PermissionGrant where
|
||
/-- 被授权的资源(`PINNED`, ADR-0004 `resource_id`)。 -/
|
||
resource : Resource I ArtifactId
|
||
/-- 被授权的主体(`PINNED` 字段/`OPEN` 表示, ADR-0004 `principal_id`;user/chat/
|
||
department/user_group/app 子类型学未定)。 -/
|
||
principal : I.Principal
|
||
/-- 授予的角色(`PINNED`, ADR-0004 `role`;read⊂edit⊂manage 见 `Permission.Role`)。 -/
|
||
role : Role
|
||
|
||
/-- 资源策略设置(`PINNED` 结构 + 六旋钮, ADR-0004 `PermissionSettings`):与 grant 分离,
|
||
控制"此资源是否开某类操作"。六旋钮由 ADR 逐字列名;各旋钮值域 `OPEN`(ADR 未定)。
|
||
共享同一 opaque `Policy` 类型:契约只约束"旋钮存在且相互独立";值域是实现/后续 ADR 的事。 -/
|
||
structure PermissionSettings where
|
||
/-- 设置所属资源(`PINNED`, ADR-0004)。 -/
|
||
resource : Resource I ArtifactId
|
||
/-- 对外分享策略(`PINNED` 旋钮名, ADR-0004 `external_share_policy`;值域 `OPEN`)。 -/
|
||
externalShare : Policy
|
||
/-- 评论策略(`PINNED` 旋钮名, ADR-0004 `comment_policy`;值域 `OPEN`)。 -/
|
||
comment : Policy
|
||
/-- 复制/下载策略(`PINNED` 旋钮名, ADR-0004 `copy_download_policy`;值域 `OPEN`)。 -/
|
||
copyDownload : Policy
|
||
/-- 协作者管理策略(`PINNED` 旋钮名, ADR-0004 `collaborator_management_policy`;
|
||
值域 `OPEN`)。 -/
|
||
collaboratorMgmt : Policy
|
||
/-- agent 触发策略(`PINNED` 旋钮名, ADR-0004 `agent_trigger_policy`;值域 `OPEN`。与
|
||
`agentCancel` 分立——"谁能触发"≠"谁能取消",ADR-0004 故意拆开)。 -/
|
||
agentTrigger : Policy
|
||
/-- agent 取消策略(`PINNED` 旋钮名, ADR-0004 `agent_cancel_policy`;值域 `OPEN`。与
|
||
`agentTrigger` 分立,见上)。 -/
|
||
agentCancel : Policy
|
||
|
||
end Spec.System
|