Пример #1
0
 public function testStorage()
 {
     $whereConditions = [new AclCondition('test', 'id', [])];
     $joinConditions = [new JoinAclCondition('testJoin', 'id', [])];
     $subRequests = [new SubRequestAclConditionStorage([], [])];
     $storage = new AclConditionStorage([], []);
     $this->assertTrue($storage->isEmpty());
     $storage->setJoinConditions($joinConditions);
     $this->assertFalse($storage->isEmpty());
     $storage->setJoinConditions([]);
     $storage->setWhereConditions($whereConditions);
     $this->assertFalse($storage->isEmpty());
     $storage->setWhereConditions([]);
     $storage->setSubRequests($subRequests);
     $this->assertFalse($storage->isEmpty());
     $storage->setWhereConditions($whereConditions);
     $storage->setJoinConditions($joinConditions);
     $this->assertEquals($whereConditions, $storage->getWhereConditions());
     $this->assertEquals($joinConditions, $storage->getJoinConditions());
     $this->assertEquals($subRequests, $storage->getSubRequests());
 }
Пример #2
0
 /**
  * Check subrequests for acl access level
  *
  * @param SelectStatement     $ast
  * @param AclConditionStorage $storage
  * @param                     $permission
  */
 protected function processSubselects(SelectStatement $ast, AclConditionStorage $storage, $permission)
 {
     $conditionalExpression = $ast->whereClause->conditionalExpression;
     if (isset($conditionalExpression->conditionalPrimary)) {
         $conditionalExpression = $conditionalExpression->conditionalPrimary;
     }
     if ($conditionalExpression instanceof ConditionalPrimary) {
         // we have request with only one where condition
         $expression = $conditionalExpression->simpleConditionalExpression;
         if (isset($expression->subselect) && $expression->subselect instanceof Subselect) {
             $subRequestAclStorage = $this->processSubselect($expression->subselect, $permission);
             if (!$subRequestAclStorage->isEmpty()) {
                 $subRequestAclStorage->setFactorId(0);
                 $storage->addSubRequests($subRequestAclStorage);
             }
         }
     } else {
         // we have request with only many where conditions
         $subQueryAcl = [];
         if (isset($conditionalExpression->conditionalFactors)) {
             $factors = $conditionalExpression->conditionalFactors;
         } else {
             $factors = $conditionalExpression->conditionalTerms;
         }
         foreach ($factors as $factorId => $expression) {
             if (isset($expression->simpleConditionalExpression->subselect) && $expression->simpleConditionalExpression->subselect instanceof Subselect) {
                 $subRequestAclStorage = $this->processSubselect($expression->simpleConditionalExpression->subselect, $permission);
                 if (!$subRequestAclStorage->isEmpty()) {
                     $subRequestAclStorage->setFactorId($factorId);
                     $subQueryAcl[] = $subRequestAclStorage;
                 }
             }
         }
         if (!empty($subQueryAcl)) {
             $storage->setSubRequests($subQueryAcl);
         }
     }
 }