public List<V_Permission> GetUserMenuPerms(string menuCode, string userID) { using (SysUserBLL bll = new SysUserBLL()) { #region List<V_Permission> plist; string keyString = "UserMenuPerms" + menuCode + userID; if (WCFCache.Current[keyString] == null) { IQueryable<V_Permission> IQList = bll.GetUserMenuPerms(menuCode, userID); plist = IQList == null ? null : IQList.ToList(); WCFCache.Current.Insert(keyString, plist, DateTime.Now.AddMinutes(15)); } else { Tracer.Debug(keyString); //Tracer.Debug("--" + "-------调用了缓存-----------------"); plist = (List<V_Permission>)WCFCache.Current[keyString]; } //Tracer.Serializer(plist, "V_Permission"); #endregion return plist == null ? null : plist; } }
/// <summary> /// 根据权限过滤 /// </summary> /// <param name="filterString"></param> /// <param name="queryParas"></param> /// <param name="userID"></param> /// <param name="entityName"></param> protected void SetOrganizationFilter(ref string filterString, ref System.Collections.Generic.List <object> queryParas, string employeeID, string entityName) { //获取用户 SysUserBLL UserBll = new SysUserBLL(); T_SYS_USER user = UserBll.GetUserByEmployeeID(employeeID); V_EMPLOYEEPOST vemp = employeeBll.GetEmployeeDetailByID(user.EMPLOYEEID); if (vemp == null) { return; } T_HR_EMPLOYEE emp = vemp.EMPLOYEEPOSTS[0].T_HR_EMPLOYEE; //获取正常的角色用户权限 IQueryable <V_Permission> plist = UserBll.GetUserMenuPerms(entityName, user.SYSUSERID); IQueryable <V_Permission> perms = plist; if (perms == null) { return; } //获取查询的权限,值越小,权限越大 int maxPerm = -1; var permlist = perms.Where(p => p.Permission.PERMISSIONVALUE == "3"); if (permlist.Count() > 0) { maxPerm = permlist.Min(p => Convert.ToInt32(p.RoleMenuPermission.DATARANGE)); } //perms.Where(p => p.Permission.PERMISSIONVALUE == "3").Min(p => Convert.ToInt32(p.RoleMenuPermission.DATARANGE)); //var maxPerm = "2"; //if (!emp.T_HR_EMPLOYEEPOST.IsLoaded) //{ // emp.T_HR_EMPLOYEEPOST.Load(); //} //获取自定义权限 int custPerm = GetCustomPerms(entityName, emp); if (custPerm < maxPerm) { maxPerm = custPerm; } //看整个公司的 if (Convert.ToInt32(maxPerm) == Convert.ToInt32(AssignObjectType.Company)) { if (!string.IsNullOrEmpty(filterString)) { filterString += " AND "; } filterString += " ("; int i = 0; foreach (T_HR_EMPLOYEEPOST ep in emp.T_HR_EMPLOYEEPOST) { if (i > 0) { filterString += " OR "; } filterString += "OWNERCOMPANYID==@" + queryParas.Count().ToString(); //暂时先去掉 //if (!ep.T_HR_POSTReference.IsLoaded) // ep.T_HR_POSTReference.Load(); //if (ep.T_HR_POST != null && ep.T_HR_POST.T_HR_DEPARTMENTReference.IsLoaded == false) // ep.T_HR_POST.T_HR_DEPARTMENTReference.Load(); //if (ep.T_HR_POST != null && ep.T_HR_POST.T_HR_DEPARTMENT != null && ep.T_HR_POST.T_HR_DEPARTMENT.T_HR_COMPANYReference.IsLoaded == false) // ep.T_HR_POST.T_HR_DEPARTMENT.T_HR_COMPANYReference.Load(); queryParas.Add(ep.T_HR_POST.T_HR_DEPARTMENT.T_HR_COMPANY.COMPANYID); i++; } filterString += ") "; } //看部门的 if (Convert.ToInt32(maxPerm) == Convert.ToInt32(AssignObjectType.Department)) { if (!string.IsNullOrEmpty(filterString)) { filterString += " AND "; } filterString += " ("; int i = 0; foreach (T_HR_EMPLOYEEPOST ep in emp.T_HR_EMPLOYEEPOST) { if (i > 0) { filterString += " OR "; } filterString += "OWNERDEPARTMENTID==@" + queryParas.Count().ToString(); if (!ep.T_HR_POSTReference.IsLoaded) { ep.T_HR_POSTReference.Load(); } if (ep.T_HR_POST != null && ep.T_HR_POST.T_HR_DEPARTMENTReference.IsLoaded == false) { ep.T_HR_POST.T_HR_DEPARTMENTReference.Load(); } queryParas.Add(ep.T_HR_POST.T_HR_DEPARTMENT.DEPARTMENTID); i++; } filterString += ") "; } //看岗位的 if (Convert.ToInt32(maxPerm) == Convert.ToInt32(AssignObjectType.Post)) { if (!string.IsNullOrEmpty(filterString)) { filterString += " AND "; } filterString += " ("; int i = 0; foreach (T_HR_EMPLOYEEPOST ep in emp.T_HR_EMPLOYEEPOST) { if (i > 0) { filterString += " OR "; } filterString += "OWNERPOSTID==@" + queryParas.Count().ToString(); if (!ep.T_HR_POSTReference.IsLoaded) { ep.T_HR_POSTReference.Load(); } queryParas.Add(ep.T_HR_POST.POSTID); i++; } filterString += ") "; } //看员工 if (Convert.ToInt32(maxPerm) == Convert.ToInt32(AssignObjectType.Employee)) { if (!string.IsNullOrEmpty(filterString)) { filterString += " AND "; } filterString += "OWNERID==@" + queryParas.Count().ToString(); queryParas.Add(employeeID); } }