/** * generic is allowed rule * * @param ModelInterface $model * @param array $arrConfig supports * - ptable string optional if want to check isAllowed for another table than data from $arrRow * - property string optional column of current row for WHERE id=? statement, default pid * - value string optional value if not want to check against a value of arrRow, default $arrRow[$pid] * - operation int operation integer for BackendUser::isAllowed * - pid string optional parent id column * * @return bool */ public static function isAllowed(ModelInterface $model, array $arrConfig) { /** @var \BackendUser $objUser */ $objUser = \BackendUser::getInstance(); $arrRow = $model->getPropertiesAsArray(); if (!isset($arrConfig['ptable'])) { return $objUser->isAllowed($arrConfig['operation'], $arrRow); } if (isset($arrConfig['ptable']) && $arrConfig['ptable'] !== true) { $strPTable = $arrConfig['ptable']; } else { $arrDefinition = Definition::getDataContainer($model->getProviderName()); $strPTable = $arrDefinition['config']['ptable']; } $strPId = isset($arrConfig['pid']) ? $arrConfig['pid'] : 'pid'; $strValue = isset($arrConfig['value']) ? $arrConfig['value'] : $arrRow[$strPId]; $objParent = \Database::getInstance()->prepare("SELECT * FROM {$strPTable} WHERE id=?")->limit(1)->execute($strValue); return $objUser->isAllowed($arrConfig['operation'], $objParent->row()); }
/** * Create legacy model * * @param ModelInterface $model * @return \Model * @throws */ public static function createLegacy(ModelInterface $model) { $class = \Model::getClassFromTable($model->getProviderName()); if (!class_exists($class)) { throw new \RuntimeException(sprintf('No model class found for "%s"', $model->getProviderName())); } /** @var \Model $legacy */ $legacy = new $class(); $legacy->setRow($model->getPropertiesAsArray()); return $legacy; }