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

posted @ 2024-04-25 11:51  ziff123  阅读(15)  评论(0编辑  收藏  举报