Skip to content

权限模型

角色

DMHub 采用三角色模型:

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

角色权限矩阵

域名

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

DNS 记录

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

快照

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

团队设置页面

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

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

成员管理

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

域名指派

操作adminmemberguest
查看
创建 / 编辑 / 删除指派
审批申请
提交指派申请

操作日志

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

通知

操作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 协议