Eclipse Ditto 的权限策略

发布时间:2026/7/6 4:49:08
Eclipse Ditto 的权限策略 在Eclipse Ditto中有专门管理物模型读取和写入的Policies。完整权限管理的数据如下{ policyId: my-demo:device001, imports: {}, entries: { DEFAULT: { subjects: { nginx:ditto: { type: generated } }, resources: { thing:/: { grant: [ READ, WRITE ], revoke: [] }, policy:/: { grant: [ READ, WRITE ], revoke: [] }, message:/: { grant: [ READ, WRITE ], revoke: [] } }, importable: implicit } } }一、整体解释这份policyId: my-demo:device001是数字孪生设备权限控制规则 允许身份nginx:ditto对当前设备、权限自身、消息通道拥有全部读写权限是本地开发调试用的全开放权限模板。1. 顶层字段释义jsonpolicyId: my-demo:device001策略唯一 ID规范和 Thing 设备 ID 同名一一绑定你的设备my-demo:device001里policyId填这个值设备才会套用这套权限。jsonimports: {}权限导入空对象代表不复用其他策略复杂多角色场景可以填入其他 policyId复用别人写好的权限规则。jsonentries: { ... }核心权限主体所有角色、资源、授予权限全部写在 entries 内部一个 entry 代表一组身份 权限规则。2. DEFAULT 权限分组entries 下的 keyjsonDEFAULT: { subjects: { ... }, // 访问人/客户端身份 resources: { ... }, // 能操作哪些资源 importable: implicit }DEFAULT分组名称自定义命名这里默认分组importable: implicit允许其他 Policy 自动导入复用这条权限规则。2.1 subjects访问身份谁能访问设备jsonsubjects: { nginx:ditto: { type: generated } }nginx:ditto身份标识基础账号格式用户名:密码 就是你浏览器、前端 TS 代码、curl 请求登录 Ditto 用的账号密码账号 ditto密码 ditto。type: generated内置自动生成的基础鉴权账号类型本地 Docker 环境默认自带。作用只有使用ditto/ditto账号发起的请求才会匹配下面 resources 里的读写权限。2.2 resources资源路径 授予 / 回收权限核心管控resources 里每一条代表一类可访问资源grant允许权限revoke禁止权限这里全为空无禁止项①thing:/数字孪生设备本体资源jsonthing:/: { grant: [READ, WRITE], revoke: [] }thing:/代表整台 my-demo:device001 设备全部内容attributes 静态档案、features 传感器 / 执行器数据READ允许读取设备所有数据WRITE允许修改压力、温度、阀门状态、新增属性等所有写操作效果前端可以读料仓负压也能下发指令开关风机阀门。②policy:/权限策略本身资源jsonpolicy:/: { grant: [READ, WRITE], revoke: [] }policy:/代表这份权限配置自己读写权限允许查看、编辑、删除当前这条 Policy 规则如果你去掉WRITE就只能看权限不能修改权限配置。③message:/消息通道资源jsonmessage:/: { grant: [READ, WRITE], revoke: [] }管控设备上下行消息、WebSocket 事件流、MQTT 指令收发READ允许订阅 WS 实时事件你的 VueThree.js 前端接收料仓压力变更全靠这个权限WRITE允许下发控制指令、手动发送模拟消息Ditto Explorer 里 Send Message 功能依赖这个权限。2.3 revoke 字段所有revoke: []为空数组 没有任何权限被禁止 如果需要精细化限制比如禁止写执行器可以在这里加入权限做回收。三、整套权限的实际业务效果对应你的料仓项目前端使用账号ditto/ditto访问 Ditto✅ 读取设备静态信息型号、车间、实时负压温度✅ 修改传感器压力数值、下发阀门 / 风机控制指令✅ 订阅 WebSocket 实时事件Three.js 自动刷新 3D 模型数据✅ 在 Ditto Explorer 里编辑、修改这条 Policy 权限本身✅ 使用 Send Message 模拟设备上报、下发控制报文四、拓展精细化权限改造示例生产环境不能全开放比如车间操作员只能看传感器数据不能操作阀门修改 resourcesjsonresources: { thing:/features/sensor: {grant:[READ],revoke:[]}, // 仅允许读压力温度 thing:/features/actuator: {grant:[],revoke:[WRITE]}, // 禁止写执行器不能开关阀门 thing:/attributes: {grant:[READ],revoke:[]}, message:/: {grant:[READ],revoke:[WRITE]} // 只能收事件不能下发指令 }五、关键概念速记subjects 谁来访问账号 / 客户端resources 能操作什么设备数据 / 权限 / 消息grant 允许做什么READ 读 / WRITE 写policyId 和 Thing 的 policyId 绑定决定设备用哪套访问规则本地调试全开放权限你当前这份适合学习工厂生产环境必须拆分只读 / 操作账号收紧 WRITE 写权限。