/**
  * @param int $userId
  * @param Captions $captions
  * @return array
  */
 public function GetUserGrants($userId, Captions $captions)
 {
     $queryBuilder = new SelectCommand($this->connectionFactory->CreateEngCommandImp());
     $queryBuilder->AddField($this->usersTable, $this->users_UserId, FieldType::Number, 'users_user_id');
     $queryBuilder->AddField($this->usersTable, $this->users_UserName, FieldType::String, 'users_user_name');
     $queryBuilder->AddField($this->userPermsTable, $this->userPerms_UserId, FieldType::Number, 'userperms_user_id');
     $queryBuilder->AddField($this->userPermsTable, $this->userPerms_PageName, FieldType::String, 'userperms_pagename');
     $queryBuilder->AddField($this->userPermsTable, $this->userPerms_Grant, FieldType::String, 'userperms_grant');
     $queryBuilder->SetSourceTableName($this->userPermsTable);
     $queryBuilder->AddJoin(JoinKind::LeftOuter, $this->usersTable, 'userperms_user_id', $this->users_UserId);
     $queryBuilder->AddFieldFilter('userperms_user_id', new FieldFilter($userId, '='));
     $dataset = new QueryDataset($this->connectionFactory, $this->connectionOptions, $queryBuilder->GetSQL(), array(), array(), array(), 'user_grants');
     $dataset->AddField(new StringField('userperms_grant'), false);
     $dataset->AddField(new StringField('userperms_pagename'), false);
     $dataset->Open();
     $pages = array();
     $pages[''] = array('name' => '', 'caption' => $captions->GetMessageString('Application'), 'selectGrant' => false, 'updateGrant' => false, 'insertGrant' => false, 'deleteGrant' => false, 'adminGrant' => false);
     foreach ($this->tableCaptions as $name => $caption) {
         $pages[$name] = array('name' => $name, 'caption' => $captions->RenderText($caption), 'selectGrant' => false, 'updateGrant' => false, 'insertGrant' => false, 'deleteGrant' => false, 'adminGrant' => false);
     }
     while ($dataset->Next()) {
         $grant = $dataset->GetFieldValueByName('userperms_grant');
         $pageName = $dataset->GetFieldValueByName('userperms_pagename');
         if (isset($pages[$pageName])) {
             $pages[$pageName]['selectGrant'] = $pages[$pageName]['selectGrant'] || StringUtils::SameText($grant, 'select');
             $pages[$pageName]['updateGrant'] = $pages[$pageName]['updateGrant'] || StringUtils::SameText($grant, 'update');
             $pages[$pageName]['insertGrant'] = $pages[$pageName]['insertGrant'] || StringUtils::SameText($grant, 'insert');
             $pages[$pageName]['deleteGrant'] = $pages[$pageName]['deleteGrant'] || StringUtils::SameText($grant, 'delete');
             $pages[$pageName]['adminGrant'] = $pages[$pageName]['adminGrant'] || StringUtils::SameText($grant, 'admin');
         }
     }
     $dataset->Close();
     return array_values($pages);
 }