blog.admin 查詢增加過濾器,新增、刪除增加資料審計、統一控制許可權操作

ziff123發表於2024-04-25

一、查詢增加過濾器

需求說明:有幾張表(醫生表、病人表等),有個欄位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

相關文章