Teamcenter学习平台正式上线(https://www.plmvision.top),安装配置实施开发源码仓库,全套学习教材!关注公众号发送“二维码“咨询加入!
前言:为什么简单的 RWX 不够用?
当图纸是“正在设计”状态时,只有张三(作者)能改。 一旦张三点击“发布”流程,图纸状态变为“已发布”,此刻瞬间,张三 立刻失去 修改权,而车间李四立刻获得 查看权。如果这需要管理员手动去改 ACL,系统早就崩溃了。
一、 Rule Tree 算法:权限不是存出来的,是算出来的
1. 树的层级结构(The Hierarchy)
Level 1 – 对象类型 (Has Class) :
是 ItemRevision?还是 Dataset?还是 Folder?
Has Status(Released)?(有没有发布状态?) In Project(ProjectA)?(是否属于某项目?)
你是 Owner(所有者)吗? 你是 Group Member(Engineering) 吗? 还是 World(任何人)?
2. 遍历算法 (The Path)
def check_access(user, object, action):current_node = Root# 步骤 1: 匹配类型if object.is_type("ItemRevision"):current_node = Node_ItemRevision# 步骤 2: 匹配状态 (更具体的条件优先)# AM 会检查该节点下的所有分支,寻找匹配当前对象特征的分支if object.has_status("Released"):current_node = Node_Releasedelse:current_node = Node_Working# 步骤 3: 获取该节点的 ACL (Access Control List)# 注意:这里不仅看叶子节点,TC 可能会累加路径上的权限(视配置而定,通常是“最近匹配原则”)acl = current_node.get_named_acl()# 步骤 4: 裁决return acl.evaluate(user, action)
二、 Named ACL:权限的“面向对象封装”

1. 什么是 Named ACL?
Owner: Read, Write, Delete, Change_Owner… (全权) Group: Read (组内可见) World: Null (其他人不可见)
Owner: Read ( 只读!写权限被剥夺 )Group: Read World: Read
2. 挂载 (Attachment)
三、 Grant vs Revoke 的博弈:Merge Logic
规则 A (Owner): Grant Write. 规则 B (Group): Revoke Write.
1. 规则的覆盖 (Override)
2. Grant 与 Revoke 的数学运算
Grant (授予) :开启某个开关。Revoke (剥夺) :强制关闭某个开关(优先级通常高于 Grant)。System Deny :硬性拒绝。
ACL 配置:Owner -> Grant Read, Revoke Delete。 即使 Owner 这种身份在系统底层默认拥有极大权力,一旦 ACL 中显式配置了 Revoke,这个“否决票”是一票否决制的。
四、 偷师目标:构建基于规则的权限引擎
解耦 :不要把权限写死在用户表或数据表里。规则树 :建立一个独立的决策树引擎。
输入:Who (User), What (Object Metadata), Context (Time/Status) 输出:Permission Mask (010101)