外观
角色管理
使用说明
主界面
角色类型:内置角色不能编辑、删除、修改数据权限,可以修改菜单权限
| 内置角色名称 | 固定的数据权限 |
|---|---|
| 超级管理员 | 全部数据权限 |
| 普通角色 | 仅本人数据权限 |
| 部门管理员 | 本部门数据权限 |
| 部门及以下管理员 | 本部门及以下数据权限 |

菜单权限界面
设置角色的菜单权限:勾选相应菜单/按钮,则该角色的用户能看到相应的菜单/按钮
- 菜单权限计算方式:并集
- 举例:用户同时属于角色A和角色B,则该用户拥有角色A和B的菜单权限

TIP
菜单权限的实现原理,详见《后端手册——RBAC权限》
数据权限界面
角色的数据权限分为5种
- 仅本人数据权限
- 本部门数据权限
- 本部门及以下数据权限
- 指定部门数据权限
- 全部数据权限
数据权限计算方式:并集。举例如下:
| 用户分配的角色 | 用户数据权限计算结果 |
|---|---|
| 用户没有分配角色 | 本人数据权限 |
| 用户同时属于角色A(本部门数据权限)和角色B(本部门及以下数据权限) | 本人数据+本部门及以下数据权限 |
| 用户同时属于角色C(指定部门数据权限)和角色B(本部门及以下数据权限) | 本人数据+指定部门数据+本部门及以下数据权限 |
| 用户分配的角色中任意一个为“全部数据权限” | 全部数据权限 |

TIP
数据权限的实现原理,详见《后端手册——数据权限》
权限使用建议
为便于权限核算与管理,建议遵循以下配置原则:
- 细化角色粒度:拆分角色并为每个角色分配最小范围的权限集合
- 分离权限类型:角色权限单一化,每个角色仅配置菜单权限或数据权限,避免混合配置
- 组合角色授权:为用户按需叠加分配多个角色,通过角色组合满足业务权限需求
配置示例
需求:用户张三仅可使用资产管理相关功能菜单,且仅能管理所属部门的数据
配置步骤:
- 新建角色 「资产管理菜单角色」:绑定资产管理相关功能菜单的访问权限,数据权限默认配置为「仅本人数据权限」
- 配置内置角色 「部门管理员」:菜单权限置空,数据权限配置为「本部门数据权限」
- 为用户张三同时分配「资产管理菜单角色」与「部门管理员」两个角色
注意
若角色或用户的权限发生变更,受影响的用户需退出系统并重新登录,权限变更才能生效
后端实现
目录
代码目录:mysite\myapp_system\role
sh
role
|-- filters.py # 搜索过滤
|-- models.py # 模型
|-- serializers.py # 序列化器
|-- services.py # 工具函数和类
`-- views.py # 视图模型
角色模型SystemRole继承了BaseModel
menus定义了与菜单多对多关系SystemRoleMenu是角色与菜单的多对多关系中间表
python
class SystemRole(BaseModel):
id = models.BigAutoField(primary_key=True, db_comment="角色ID", help_text="角色ID")
name = models.CharField(max_length=30, db_comment="角色名称", help_text="角色名称")
# ...
menus = models.ManyToManyField(
"SystemMenu",
through="SystemRoleMenu",
through_fields=("role_id", "menu_id"),
related_name="roles",
)
# ...视图
角色视图RoleViewSet继承了CustomModelViewSet
- 重写了
destroy方法:判断如果是内置角色,则不能删除 - 重写了
update方法:判断如果是内置角色,则不能修改

前端实现
目录
- 代码目录:
src\views\system\role
sh
role
|-- RoleAssignMenuForm.vue # 菜单权限界面
|-- RoleDataPermissionForm.vue # 数据权限界面
|-- RoleForm.vue # 编辑界面
`-- index.vue # 主界面