前面四篇我们讲了快速搭建、目录结构、CRUD、关联表处理。今天说后台系统最核心的东西——权限控制。
一个后台系统,没有权限控制,就像银行没有保险柜。
一、EasyAdminBlazor 的权限模型
内置的是标准的 RBAC(Role-Based Access Control) 模型,也就是”用户 → 角色 → 权限”。
用户(User) → 角色(Role) → 菜单/按钮(Menu)
| 概念 | 说明 |
|---|---|
| 用户 | 登录系统的人 |
| 角色 | 超级管理员、普通管理员、内容编辑… |
| 菜单 | 后台左侧导航菜单 |
| 按钮 | 页面上的新增、删除、导出等操作 |
一个用户可以有多个角色。一个角色可以访问多个菜单/按钮。权限取并集。
二、增删改查:零代码自动控制
在 EasyAdminBlazor 里,AdminTable 组件自带的新增、编辑、删除按钮,不需要你在代码里做任何权限设置。
框架会自动判断:
- 用户有这个权限 → 显示按钮
- 用户没有这个权限 → 按钮自动隐藏
你只管用 <AdminTable>,权限的事它自己搞定。
三、自定义权限:一行代码
如果你有自定义按钮(比如”审核”、”发布”),需要自己控制显隐:
private bool isEditAuth { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
isEditAuth = await admin.AuthButton("edit");
}
然后在模板里:
@if (isEditAuth)
{
<button @onclick="DoEdit">编辑</button>
}
admin.AuthButton("edit") 会检查当前用户有没有 edit 这个按钮的权限。
权限标识在菜单管理里配置,你想叫什么就叫什么。
四、菜单权限:自动的
菜单管理里配置好权限标识后,左侧菜单自动显示/隐藏,不需要你写任何代码。
五、数据权限:继承接口 + 开启开关
如果想让不同人看不同范围的数据(比如经理看全部门,员工只看自己的),两步搞定。
第1步:实体继承 IDataPermission
public class Article : EntityModified, IDataPermission
{
// 实体原有的字段...
public long? CreateUserId { get; set; }
}
第2步:在 AdminTable 开启 UseDataPermission
<AdminTable TItem="Article" TKey="long" UseDataPermission="true">
<TableColumns>
<TableColumn @bind-Field="context.Title" Text="标题" />
</TableColumns>
</AdminTable>
就这么简单。框架会根据当前用户的数据权限范围,自动在查询时加上 Where 条件:
| 用户的数据权限 | 自动筛选条件 |
|---|---|
| 全部数据 | 无筛选 |
| 本部门及以下 | CreateUserId in (本部门及子部门用户ID) |
| 本部门数据 | CreateUserId in (本部门用户ID) |
| 仅本人数据 | CreateUserId = 当前用户ID |
不需要在 OnBeforeQuery 里手写任何判断。
六、流程图
用户登录
↓
查询用户角色
↓
查询角色权限
↓
AdminTable 自动判断增删改查按钮显隐
↓
自定义按钮用 AuthButton() 判断
↓
开启 UseDataPermission 后查询自动加过滤条件
七、总结
| 权限类型 | 你需要做什么 |
|---|---|
| 增删改查按钮 | 什么都不用做 |
| 菜单权限 | 菜单管理里配置 |
| 自定义按钮权限 | AuthButton("权限标识") 一行代码 |
| 数据权限 | 1. 实体继承 IDataPermission 2. AdminTable 加 UseDataPermission="true" |
你只需要在菜单管理里配好权限标识,框架替你搞定一切。
下一篇预告
《EasyAdminBlazor 第六篇:多租户 SaaS 实战》
讲一个后台系统如何同时服务多个客户、数据如何隔离、按域名自动识别租户。
文档:https://easyadmim.wang-zhan.com.cn/doc
源码:https://gitee.com/gudufy/EasyAdminBlazor
EasyAdminBlazor —— 不用写 API,不用分离,权限配置只需点鼠标
文章摘自:https://www.cnblogs.com/abpzero/p/20232331
