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()); } } }