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. 顶层字段释义

json

复制代码
"policyId": "my-demo:device001"
  • 策略唯一 ID,规范和 Thing 设备 ID 同名,一一绑定;
  • 你的设备 my-demo:device001policyId 填这个值,设备才会套用这套权限。

json

复制代码
"imports": {}
  • 权限导入,空对象代表不复用其他策略
  • 复杂多角色场景可以填入其他 policyId,复用别人写好的权限规则。

json

复制代码
"entries": { ... }

核心权限主体:所有角色、资源、授予权限全部写在 entries 内部,一个 entry 代表一组身份 + 权限规则。

  1. "DEFAULT" 权限分组(entries 下的 key)

json

复制代码
"DEFAULT": {
  "subjects": { ... }, // 访问人/客户端身份
  "resources": { ... }, // 能操作哪些资源
  "importable": "implicit"
}
  • DEFAULT:分组名称,自定义命名,这里默认分组;
  • importable: "implicit":允许其他 Policy 自动导入复用这条权限规则。

2.1 subjects:访问身份(谁能访问设备)

json

复制代码
"subjects": {
  "nginx:ditto": {
    "type": "generated"
  }
}
  1. nginx:ditto:身份标识(基础账号格式 用户名:密码) 就是你浏览器、前端 TS 代码、curl 请求登录 Ditto 用的账号密码:账号 ditto,密码 ditto。
  2. "type": "generated":内置自动生成的基础鉴权账号类型,本地 Docker 环境默认自带。

作用:只有使用 ditto/ditto 账号发起的请求,才会匹配下面 resources 里的读写权限。

2.2 resources:资源路径 + 授予 / 回收权限(核心管控)

resources 里每一条,代表一类可访问资源grant 允许权限,revoke 禁止权限(这里全为空,无禁止项)

thing:/ 数字孪生设备本体资源

json

复制代码
"thing:/": {
  "grant": ["READ", "WRITE"],
  "revoke": []
}
  • thing:/ 代表整台 my-demo:device001 设备全部内容:attributes 静态档案、features 传感器 / 执行器数据;
  • READ:允许读取设备所有数据;
  • WRITE:允许修改压力、温度、阀门状态、新增属性等所有写操作;
  • 效果:前端可以读料仓负压,也能下发指令开关风机阀门。

policy:/ 权限策略本身资源

json

复制代码
"policy:/": {
  "grant": ["READ", "WRITE"],
  "revoke": []
}
  • policy:/ 代表这份权限配置自己;
  • 读写权限:允许查看、编辑、删除当前这条 Policy 规则;
  • 如果你去掉WRITE,就只能看权限,不能修改权限配置。

message:/ 消息通道资源

json

复制代码
"message:/": {
  "grant": ["READ", "WRITE"],
  "revoke": []
}
  • 管控设备上下行消息、WebSocket 事件流、MQTT 指令收发;
  • READ:允许订阅 WS 实时事件(你的 Vue+Three.js 前端接收料仓压力变更全靠这个权限);
  • WRITE:允许下发控制指令、手动发送模拟消息(Ditto Explorer 里 Send Message 功能依赖这个权限)。

2.3 revoke 字段

所有"revoke": [] 为空数组 = 没有任何权限被禁止; 如果需要精细化限制,比如禁止写执行器,可以在这里加入权限做回收。

三、整套权限的实际业务效果(对应你的料仓项目)

前端使用账号 ditto/ditto 访问 Ditto:

  1. ✅ 读取设备静态信息(型号、车间)、实时负压温度;
  2. ✅ 修改传感器压力数值、下发阀门 / 风机控制指令;
  3. ✅ 订阅 WebSocket 实时事件,Three.js 自动刷新 3D 模型数据;
  4. ✅ 在 Ditto Explorer 里编辑、修改这条 Policy 权限本身;
  5. ✅ 使用 Send Message 模拟设备上报、下发控制报文;

四、拓展:精细化权限改造示例(生产环境不能全开放)

比如车间操作员只能看传感器数据,不能操作阀门,修改 resources:

json

复制代码
"resources": {
  "thing:/features/sensor": {"grant":["READ"],"revoke":[]}, // 仅允许读压力温度
  "thing:/features/actuator": {"grant":[],"revoke":["WRITE"]}, // 禁止写执行器(不能开关阀门)
  "thing:/attributes": {"grant":["READ"],"revoke":[]},
  "message:/": {"grant":["READ"],"revoke":["WRITE"]} // 只能收事件,不能下发指令
}

五、关键概念速记

  1. subjects = 谁来访问(账号 / 客户端)
  2. resources = 能操作什么(设备数据 / 权限 / 消息)
  3. grant = 允许做什么(READ 读 / WRITE 写)
  4. policyId 和 Thing 的 policyId 绑定,决定设备用哪套访问规则
  5. 本地调试全开放权限(你当前这份)适合学习;工厂生产环境必须拆分只读 / 操作账号,收紧 WRITE 写权限。
相关推荐
专业工业电源打工人5 分钟前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
a11177617 分钟前
三色软糖坠落玻璃池 THreeJS kimi
前端·人工智能·threejs
he391237726 分钟前
ogg命令
运维·网络
其实防守也摸鱼27 分钟前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
imc.1128 分钟前
linux EXT文件系统
linux·运维·服务器
weixin_BYSJ198730 分钟前
springboot3家政平台小程序--附源码00904
java·javascript·spring boot·python·django·flask·php
梦幻通灵1 小时前
Java中finally失效的几种情况【持续更新】
java·开发语言
月落归舟1 小时前
SpringMVC 多种响应返回方式
java·开发语言
吃饱了得干活1 小时前
JVM垃圾回收:从新生代到ZGC,从理论到调优
java·jvm·后端
长不胖的路人甲1 小时前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法