From 253d21cb54d8dae35a2c46f4f4f5ff5c5e7f1ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 23 May 2023 14:11:52 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E5=85=BC=E5=AE=B9=E5=A4=9A=E5=A4=9A=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Extensions/DbExtension.cs | 28 ++++++++++++----------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 2aa5bac..1e2d7d6 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -145,9 +145,13 @@ namespace ZR.Admin.WebApi.Extensions //管理员不过滤 if (user.RoleIds.Any(f => f.Equals(GlobalConstant.AdminRole))) return; var db = DbScoped.SugarScope.GetConnectionScope(configId); + var expUser = Expressionable.Create().Or(it => 1 == 1); + var expRole = Expressionable.Create().Or(it => 1 == 1); + var expLoginlog = Expressionable.Create(); + foreach (var role in user.Roles.OrderBy(f => f.DataScope)) { - string dataScope = role.DataScope.ToString(); + long dataScope = role.DataScope; if (DATA_SCOPE_ALL.Equals(dataScope))//所有权限 { break; @@ -155,31 +159,29 @@ namespace ZR.Admin.WebApi.Extensions else if (DATA_SCOPE_CUSTOM.Equals(dataScope))//自定数据权限 { //" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); - var filter1 = new TableFilterItem(it => SqlFunc.Subqueryable().Where(f => f.DeptId == it.DeptId && f.RoleId == role.RoleId).Any()); - db.QueryFilter.Add(filter1); + + expUser.Or(it => SqlFunc.Subqueryable().Where(f => f.DeptId == it.DeptId && f.RoleId == role.RoleId).Any()); } else if (DATA_SCOPE_DEPT.Equals(dataScope))//本部门数据 { - var filter1 = new TableFilterItem(it => it.DeptId == user.DeptId); - db.QueryFilter.Add(filter1); + expUser.Or(it => it.DeptId == user.DeptId); } else if (DATA_SCOPE_DEPT_AND_CHILD.Equals(dataScope))//本部门及以下数据 { //SQl OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) ) var allChildDepts = db.Queryable().ToChildList(it => it.ParentId, user.DeptId); - var filter1 = new TableFilterItem(it => allChildDepts.Select(f => f.DeptId).ToList().Contains(it.DeptId)); - db.QueryFilter.Add(filter1); - - var filter2 = new TableFilterItem(it => allChildDepts.Select(f => f.DeptId).ToList().Contains(it.DeptId)); - db.QueryFilter.Add(filter2); + expUser.Or(it => allChildDepts.Select(f => f.DeptId).ToList().Contains(it.DeptId)); } else if (DATA_SCOPE_SELF.Equals(dataScope))//仅本人数据 { - db.QueryFilter.AddTableFilter(it => it.UserId == user.UserId); - db.QueryFilter.AddTableFilter(it => user.RoleIds.Contains(it.RoleKey)); - db.QueryFilter.AddTableFilter(it => it.UserName == user.UserName); + expUser.Or(it => it.UserId == user.UserId); + expRole.Or(it => user.RoleIds.Contains(it.RoleKey)); + expLoginlog.And(it => it.UserName == user.UserName); } + db.QueryFilter.AddTableFilter(expUser.ToExpression()); + db.QueryFilter.AddTableFilter(expRole.ToExpression()); + db.QueryFilter.AddTableFilter(expLoginlog.ToExpression()); } } }