blog.admin 查询增加过滤器,添加、删除增加数据审计、统一控制权限操作
一、查询增加过滤器
需求说明:有几张表(医生表、病人表等),有个字段ClinicID都与诊所表主键Id关联。用户登录系统时候,根据所分配的诊所权限,只查看自己诊所的数据。通过查询过滤器,在查询每个表的时候,自动将ClinicID==当前登录用户所属ClinicID,添加上。
1、创一个IClinicEntity接口
using SqlSugar; namespace Blog.Core.Model.Tenants { public interface IClinicEntity { /// <summary> /// 诊所Id /// </summary> [SugarColumn(DefaultValue = "0")] public long ClinicID { get; set; } } }
2、所有有诊所ID外键的表,都需要继承这个接口IClinicEntity
public class Doctor : ClinicRoot<long>, IClinicEntity
3、在项目的Blog.Core.Common.DB.RepositorySetting类里面添加以下方法
public static void SetClinicEntityFilter(SqlSugarScopeProvider db) { if (App.User is not { ID: > 0, ClinicID: > 0 }) { return; } db.QueryFilter.AddTableFilter<IClinicEntity>(it => it.ClinicID == App.User.ClinicID || it.ClinicID ==0); }
4、在项目的Blog.Core.Extensions.SqlsugarSetup类里面增加以下代码
之后对继承IClinicEntity的所有表查询,都会加上ClinicID == App.User.ClinicID 这个条件。
二、添加、修改增加数据审计
需求说明:每次添加、修改表数据的时候ClinicID自动赋值当时登录用户的ClinicID
1、Blog.Core.Common.DB.Aop.SqlSugarAop类里面增加以下代码
if(App.User?.ID > 0 && App.User?.ClinicID > 0) //诊所 { if (baseEntity is IClinicEntity clinicEntity) { clinicEntity.ClinicID = App.User.ClinicID; } }
之后每次对继承接口IClinicEntity表的所有添加、修改操作,都会自动赋值ClinicID
参考:https://www.donet5.com/doc/1/1205
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现