五、EasyAdminBlazor 第五篇:权限控制——后台系统的核心命脉

前面四篇我们讲了快速搭建、目录结构、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. AdminTableUseDataPermission="true"

你只需要在菜单管理里配好权限标识,框架替你搞定一切。


下一篇预告

《EasyAdminBlazor 第六篇:多租户 SaaS 实战》

讲一个后台系统如何同时服务多个客户、数据如何隔离、按域名自动识别租户。


文档:https://easyadmim.wang-zhan.com.cn/doc
源码:https://gitee.com/gudufy/EasyAdminBlazor

EasyAdminBlazor —— 不用写 API,不用分离,权限配置只需点鼠标

文章摘自:https://www.cnblogs.com/abpzero/p/20232331