예제 #1
0
 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;
 }
예제 #2
0
 protected function isEnabledInFreeItem(ICFlowType $flow, ICFlowRunProcess $rp)
 {
     return $flow->isFree() && $rp->freeitem == "" || StringUtil::findIn($rp->freeitem, "[A@]");
 }