public static function checkProcessPermission($flowId, $processId, $uid) { $user = User::model()->fetchByUid(intval($uid)); $flow = new ICFlowType(intval($flowId), false); $criteria = array("select" => "processid,uid,deptid,positionid", "condition" => sprintf("processid > 0 AND flowid = %d%s", $flowId, $processId ? " AND processid = {$processId}" : "")); foreach (FlowProcess::model()->fetchAll($criteria) as $process) { $deptAccess = self::compareIds($user["alldeptid"], $process["deptid"], "d"); $userAccess = self::compareIds($uid, $process["uid"], "u"); $posAccess = self::compareIds($user["allposid"], $process["positionid"], "p"); if ($deptAccess || $userAccess || $posAccess) { return true; } } if (empty($processId)) { $hasPermission = FlowPermission::model()->fetchPermission($uid, $flowId); if ($hasPermission) { return true; } } if ($flow->isFree()) { if ($processId != 1) { return true; } else { $ids = $flow->newuser; if (!empty($ids)) { $deptAccess = self::compareMixedIds($user["alldeptid"], $ids, "d"); $userAccess = self::compareMixedIds($uid, $ids, "u"); $posAccess = self::compareMixedIds($user["allposid"], $ids, "p"); if ($deptAccess || $userAccess || $posAccess) { return true; } else { return false; } } } } unset($flow); return false; }
protected function isEnabledInFreeItem(ICFlowType $flow, ICFlowRunProcess $rp) { return $flow->isFree() && $rp->freeitem == "" || StringUtil::findIn($rp->freeitem, "[A@]"); }