全局过滤器的用法

全局过滤器的作用比较大,例如我所有的表都要加IsDeleted==1 这个时候只要设置了全局过滤器,所有的查询都可以自动添加这个条件。



    //行过滤加列过滤
    //权限管理的最佳设计
    public class Filter
    {

        public void Init()
        {
            using (SqlSugarClient db = SugarDaoFilter.GetInstance())//开启数据库连接
            {
                //设置走哪个过滤器
                db.CurrentFilterKey = "role1";
                //queryable
                var list = db.Queryable<Student>().ToJson(); //where id=1 , 可以查看id和name


                //设置走哪个过滤器
                db.CurrentFilterKey = "role2";
                //queryable
                var list2 = db.Queryable<Student>().ToJson(); //where id=2 , 可以查看name

            }
        }
        /// <summary>
        /// 扩展SqlSugarClient
        /// </summary>
        public class SugarDaoFilter
        {
            //禁止实例化
            private SugarDaoFilter()
            {

            }
            /// <summary>
            /// 页面所需要的过滤行
            /// </summary>
            private static Dictionary<string, Func<KeyValueObj>> _filterRos = new Dictionary<string, Func<KeyValueObj>>()
            {
              { "role1",()=>{
                        return new KeyValueObj(){ Key=" id=@id" , Value=new{ id=1}};
                   }
              },
              { "role2",()=>{
                  return new KeyValueObj() { Key = " id=@id", Value = new { id = 2 } };
                  }
              },
            };
            /// <summary>
            /// 页面所需要的过滤列
            /// </summary>
            private static Dictionary<string, List<string>> _filterColumns = new Dictionary<string, List<string>>()
            {
              { "role1",new List<string>(){"id","name"}
              },
              { "role2",new List<string>(){"name"}
              },
            };
            public static SqlSugarClient GetInstance()
            {
                string connection = SugarDao.ConnectionString; //这里可以动态根据cookies或session实现多库切换
                var db = new SqlSugarClient(connection);

                //支持sqlable和queryable
                db.SetFilterItems(_filterRos);

                //列过滤只支持queryable
                db.SetFilterItems(_filterColumns);


                db.IsEnableLogEvent = true;//启用日志事件
                db.LogEventStarting = (sql, par) => { Console.WriteLine(sql + " " + par + "\r\n"); };
                return db;
            }
        }
    }


收藏到朋友圈: