<?php /** * Created by PhpStorm. * User: yingcai * Date: 2017/10/10 * Time: 下午4:00 */ namespace Common\Model; use Common\Common\Constant; use Common\Common\Department; class ExamPaperModel extends \Com\Model { // 构造方法 public function __construct() { parent::__construct('Paper', 'oa_exam_'); } /** * 获取用户所在部门以及父级部门的ID集合 * @param array $user * @return array */ private function get_user_dp_list($user = array()) { $dpIds = array(); // 部门ID if (isset($user['dpName']) && !empty($user['dpName'])) { $myDpIds = array_column($user['dpName'], 'dpId'); $dpServ = &Department::instance(); $parentDpIds = []; // 取父级部门ID foreach ($myDpIds as $myDpId) { $dpServ->list_parent_cdids($myDpId, $parentDpIds); } $dpIds = array_unique(array_merge($myDpIds, array_values($parentDpIds))); } return $dpIds; } /** * 获取当前用户的标签,部门,岗位,用户ID * * @author 英才 * @param array $user 传入当前用户信息 * * @return array */ private function get_by_right($user = array()) { // 获取用户所在部门ID以及上级部门ID $dpIds = $this->get_user_dp_list($user); // 职位 if (isset($user['job']['jobId'])) { $job_ids = [$user['job']['jobId']]; // 兼容UC人员列表接口返回的职位数据 } elseif (isset($user['jobList']) && !empty($user['jobList'])) { $job_ids = array_column($user['jobList'], 'jobId'); } // 角色 if (isset($user['role']['roleId'])) { $role_ids = [$user['role']['roleId']]; // 兼容UC人员列表接口返回的角色数据 } elseif (isset($user['roleList']) && !empty($user['roleList'])) { $role_ids = array_column($user['roleList'], 'roleId'); } return array( 'memID' => $user['memUid'], 'dpIds' => $dpIds, 'jobIds' => $job_ids, 'roleIds' => $role_ids ); } /** * 根据权限获取用户有权限 * @param $user 用户信息 * @return bool */ public function list_paper_by_user($user) { $right = $this->get_by_right($user); // 获取权限查询权限试卷列表 list($sql_right, $params_right) = $this->get_right_paper_sql($right); if (!empty($sql_right)) { return $this->_m->fetch_array($sql_right, $params_right); } return []; } /** * 组装可见范围不为全公司的试卷-权限sql * @param $cond 查询条件 * @return array sql语句、参数 */ protected function get_right_paper_sql($right) { $where_right = ''; $right_params = array(); // 用户 if (!empty($right['memID'])) { $where_right .= empty($where_right) ? " uid =? " : " OR uid =? "; $right_params[] = $right['memID']; } // 部门 if (!empty($right['dpIds'])) { $where_right .= empty($where_right) ? " `cd_id` IN (?) " : " OR `cd_id` IN (?) "; $right_params[] = $right['dpIds']; } // 岗位 if (!empty($right['jobIds'])) { $where_right .= empty($where_right) ? " `job_id` IN (?) " : " OR `job_id` IN (?) "; $right_params[] = $right['jobIds']; } // 角色 if (!empty($right['roleIds'])) { $where_right .= empty($where_right) ? " `role_id` IN (?) " : " OR `role_id` IN (?) "; $right_params[] = $right['roleIds']; } if (empty($where_right)) { return array('', []); } $params[] = Constant::EC_OPEN_STATES; $params[] = Constant::PAPER_DRAFT; $params[] = QY_DOMAIN; $params[] = self::ST_DELETE; $params[] = Constant::EXAM_RIGHT_PAPER; $sql = 'SELECT `ep`.ep_id,`ep`.ep_name FROM __TABLE__ AS `ep` LEFT JOIN `oa_exam_right` AS `r` ON `ep`.`ep_id`=`r`.epc_id WHERE `ep`.`cate_status`=? AND `ep`.`exam_type`=1 AND `ep`.`exam_status`>? AND ep.`domain`=? AND ep.`status`<? AND r.`er_type`=? AND (' . $where_right . ') AND r.`domain`=? AND r.`status`<?'; // 合并权限where参数 $params = array_merge($params, $right_params); $params[] = QY_DOMAIN; $params[] = self::ST_DELETE; return array($sql, $params); } }