主 题
博客系统自文档 · 第 8/16 篇
目录 · 上一篇:API 级 RBAC · 下一篇:RPG 玩法全览
写在前面
新人常把 dept(机构) 和 category(分类) 搞混:前者管 谁能看哪些数据,后者管 读者怎么浏览内容。本篇讲清二者与 DataScopeService 的配合。
功能与体验
| 概念 | 用户可见? | 作用 |
|---|---|---|
| category | 是 | 首页筛选、/category/[id] 文章列表 |
| tag | 是 | /tag/[id] 多标签筛选 |
| dept | 基本否 | 后台「机构/专栏」;作者归属哪个组织 |
作者发文时 自动继承 user.deptId 写入 article.deptId;无 deptId 则无法创建文章。
种子机构(init.sql 示例)
| id | 名称 | 说明 |
|---|---|---|
| 4 | 创作者社区 | 注册作者默认归属 |
| 6 | 技术专栏 | 工程类内容组织 |
| 8 | RPG 玩法专栏 | 攻略向内容 |
设计与实现
flowchart LR
Role[角色 role]
RDS[role_data_scope]
DS[DataScopeService]
Q[文章列表 QueryBuilder]
Role --> RDS --> DS --> Q
Q -->|加 deptId 条件| DB[(article)]
DataScope 类型
配置在 role_data_scope 表,按 角色 + 资源类型(如 article):
| scopeType | 含义 |
|---|---|
| ALL | 全部机构 |
| CUSTOM | 指定 deptIds 列表 |
| SELF | 仅本人数据 |
| DEPT | 本机构 |
| DEPT_AND_CHILD | 本机构及子机构 |
ArticleService 列表查询注入 dataScopeService.applyScope(...),admin 看文章列表时不同角色看到不同范围。
与 RBAC 分工
| 层 | 回答问题 |
|---|---|
| privilege | 能否调用 /article/list? |
| data scope | 列表里有哪些行的 deptId? |
踩坑与取舍
- category 不参与权限:公开 C 端分类页仍按 taxonomy 查,不受 dept 限制(公开已发布文)。
- 改 dept 要同步用户:作者
deptId为空会导致创建文章失败。 - 机构树:dept 表支持
parentId,DEPT_AND_CHILD_walk 子节点。
系列导航
- 导读 · 第 0 篇
- 下一篇:10 RPG 技术实现
延伸阅读
security/data-scope/data-scope.service.tsdeploy/sql/init.sqldept 种子数据

全部评论(0)