一、查詢增加過濾器
需求說明:有幾張表(醫生表、病人表等),有個欄位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