// // ResourcePermission 权限判断 // #region public bool CheckPermissionByUser(string userId, string permissionItemCode, string permissionItemName = null) 是否有相应的权限 /// <summary> /// 是否有相应的权限 /// </summary> /// <param name="userId">用户主键</param> /// <param name="permissionItemCode">权限编号</param> /// <param name="permissionItemName">权限名称</param> /// <returns>是否有权限</returns> public bool CheckPermissionByUser(string userId, string permissionItemCode, string permissionItemName = null) { // 若不存在就需要自动能增加一个操作权限项 var permissionItemManager = new PiPermissionItemManager(DBProvider, UserInfo, PiPermissionItemTable.TableName); var permissionItemId = permissionItemManager.GetIdByAdd(permissionItemCode, permissionItemName); var permissionItemEntity = permissionItemManager.GetEntity(permissionItemId); // 先判断用户类别 if (UserInfo.IsAdministrator) { return(true); } // 没有找到相应的权限 if (String.IsNullOrEmpty(permissionItemId)) { return(false); } // 这里需要判断,是系统权限? var returnValue = false; var userManager = new PiUserManager(this.DBProvider, this.UserInfo); var userRoleManager = new PiUserRoleManager(this.DBProvider, this.UserInfo); if (!string.IsNullOrEmpty(permissionItemEntity.CategoryCode) && permissionItemEntity.CategoryCode.Equals("System")) { // 用户管理员拥有所有的系统权限,不需要授予。 returnValue = userRoleManager.UserInRole(userId, "UserAdmin"); if (returnValue) { return(returnValue); } } // 这里需要判断,是业务(应用)权限? if (!string.IsNullOrEmpty(permissionItemEntity.CategoryCode) && permissionItemEntity.CategoryCode.Equals("Application")) { //业务管理员拥有所有的业务(应用)权限,不需要授予。 returnValue = userRoleManager.UserInRole(userId, "Admin"); if (returnValue) { return(returnValue); } } // 判断用户权限 if (this.CheckUserPermission(userId, permissionItemId)) { return(true); } // 判断用户角色权限 if (this.CheckUserRolePermission(userId, permissionItemId)) { return(true); } // 判断用户组织机构权限,这里有开关是为了提高性能用的, // 下面的函数接着还可以提高性能,可以进行一次判断就可以了,其实不用执行4次判断,浪费I/O,浪费性能。 if (SystemInfo.EnableOrganizePermission) { //得到用户所有所在的部门(以公司、分支机构、部门、子部门、工作组),包括兼职部门 var organizeIds = userManager.GetAllOrganizeIds(userId); if (this.CheckUserOrganizePermission(userId, permissionItemId, organizeIds)) { return(true); } } return(false); }