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 @   ziff123  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示