/** * Get readable storages by SecurityContext. * Be careful! The method works under FolderTable and $parameters belongs to FolderTable. * @param SecurityContext $securityContext SecurityContext. * @param array $parameters Parameters to getList. * @return Storage[] */ public static function getReadableList(SecurityContext $securityContext, array $parameters = array()) { /** @var Folder[] $items */ $filter = array('=PARENT_ID' => null, '=STORAGE.MODULE_ID' => Driver::INTERNAL_MODULE_ID, '=RIGHTS_CHECK' => true); if (!empty($parameters['filter']['STORAGE.ENTITY_TYPE'])) { $filter['=STORAGE.ENTITY_TYPE'] = $parameters['filter']['STORAGE.ENTITY_TYPE']; } if (!empty($parameters['filter']['STORAGE.SITE_ID'])) { $filter['=STORAGE.SITE_ID'] = $parameters['filter']['STORAGE.SITE_ID']; } $parameters = array('with' => array('STORAGE'), 'runtime' => array(new ExpressionField('RIGHTS_CHECK', 'CASE WHEN ' . $securityContext->getSqlExpressionForList('%1$s', '%2$s') . ' THEN 1 ELSE 0 END', array('ID', 'CREATED_BY'), array('data_type' => 'boolean'))), 'filter' => $filter); $parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, array('ID', 'CREATED_BY')); $items = Folder::getModelList($parameters); $storages = array(); foreach ($items as $item) { $item->getStorage()->setAttributes(array('ROOT_OBJECT' => $item)); $storages[] = $item->getStorage(); } unset($item); return $storages; }
/** * Add to parameters rights check by security context for use in getList. * @param Security\SecurityContext $securityContext * @param array $parameters * @param array $specificColumns List of columns to use in $securityContext->getSqlExpressionForList. * @return array */ public function addRightsCheck(Security\SecurityContext $securityContext, array $parameters, array $specificColumns) { if (!isset($parameters['filter'])) { $parameters['filter'] = array(); } if (!isset($parameters['runtime'])) { $parameters['runtime'] = array(); } $parameters['runtime'][] = new ExpressionField('RIGHTS_CHECK', 'CASE WHEN ' . $securityContext->getSqlExpressionForList('%1$s', '%2$s') . ' THEN 1 ELSE 0 END', $specificColumns, array('data_type' => 'boolean')); $parameters['filter']['=RIGHTS_CHECK'] = true; return $parameters; }