Skip to content

权限模型 ​

角色 ​

DMHub 采用三角色模型:

角色说明
admin全局管理员,拥有所有功能访问权限
member团队成员,在指派范围内管理 DNS 记录
guest访客,仅可查看

角色权限矩阵 ​

域名 ​

操作adminmemberguest
查看✅指派范围内❌
创建 / 编辑✅❌❌
删除✅❌❌
修改元数据(标签/分组/状态)✅❌❌

DNS 记录 ​

操作adminmemberguest
查看✅指派范围内❌
创建 / 修改 / 删除✅指派范围内(dns_edit)❌

快照 ​

操作adminmemberguest
查看✅指派范围内❌
创建✅指派范围内❌
回滚✅❌❌

团队设置页面 ​

操作adminmemberguest
查看(基本信息/SMTP/注册/主页/公告)✅❌❌
编辑✅❌❌

站外公告通过 / 公开页面展示,无需登录即可查看。

成员管理 ​

操作adminmemberguest
查看✅✅✅
编辑角色 / 启用 / 禁用✅❌❌
移除成员✅❌❌

域名指派 ​

操作adminmemberguest
管理指派(设置页)✅❌❌
查看自己的指派范围✅✅❌
审批申请✅❌❌
提交指派申请✅✅❌

成员在「我的域名 / 域名详情」可见 assignments[](子域名模式 + 权限),DNS 列表按 pattern 过滤。

操作日志 ​

操作adminmemberguest
查看全部✅❌❌
查看指派范围✅✅❌

通知 ​

操作adminmemberguest
外部渠道配置✅❌❌
站内信(铃铛)✅✅✅*
个人站内通知开关✅✅✅
个人邮件通知开关✅✅✅

* 有登录会话即可接收;guest 若被指派域名同理。

OAuth / OIDC ​

操作adminmemberguest
配置提供商✅❌❌
使用登录按钮✅✅✅
账号绑定 / 解绑✅✅✅

API Key ​

操作adminmemberguest
创建 / 管理 API Key✅❌❌
创建 / 管理用户令牌✅✅❌

域名级权限 ​

domain_assignments 表控制 member 对特定域名的访问:

子域名匹配模式 ​

模式含义匹配示例
*整个域名(包含 apex 和所有子域)example.com + *.example.com
'' / @仅 apex 自身example.com
blog仅指定子域blog.example.com
*.dev通配子级api.dev.example.com(不含 dev.example.com)

匹配规则 ​

text
matchesSubdomainPattern('blog', '*');        // true(全通配)
matchesSubdomainPattern('blog', 'blog');     // true(精确匹配)
matchesSubdomainPattern('api.dev', '*.dev'); // true(子级匹配)
matchesSubdomainPattern('dev', '*.dev');     // false(仅子级,不含自身)
matchesSubdomainPattern('', '@');            // true(apex)

权限级别 ​

权限说明
dns_edit可创建、修改、删除 DNS 记录
dns_readonly仅可查看 DNS 记录

中间件校验分层 ​

中间件校验粒度说明
requireDomainAccess域名级验证用户对该 domainId 至少有一条 assignment(读权限)
requireDomainWriteAccess域名级进一步要求 dns_edit 权限
requireRecordWriteAccess记录级取出该 record 的 name,逐一比对用户所有 assignment 的 pattern,命中即放行

lib/subdomain-match.ts 实现 pattern 匹配规则。

数据隔离 ​

  • admin 查看全部数据
  • member 仅查看和操作指派范围内的域名和记录
  • guest 无管理权限
  • 中间件层统一校验,不依赖前端控制

AGPL-3.0 协议