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