/** * Устанавливает переменные для генерации формы для добавления объекта * @param type $this->fw */ private function setForm() { if (\models\ACL::getInstance()->check($this->user_group_id, $this->model->getTable(), \models\ACL::RELATION_REF, \models\ACL::ACTION_CREATE)) { $this->fw->set('html.show_add_form', true); $this->fw->set('create_action_url', $this->fw->alias('backend_group_create', 'table=' . $this->table)); $this->fw->set('form.title', $this->fw->get('i18n.form.title.add') . ' ' . $this->fw->get('i18n.groups.title.add')); } }
/** * Возвращает значение поля для пользователя с заданным ID */ public function value() { $one = $this->user_model->get($this->fw->get('GET.id')); $rel = \models\ACL::getInstance()->getRelation($this->user_id, $one['id']); if (\models\ACL::getInstance()->check($this->user_group_id, '_user', $rel, \models\ACL::ACTION_READ)) { $this->setAJAXLayout(); $field = $this->fw->get('PARAMS.field'); $this->fw->set('content', isset($one->{$field}) ? $one->{$field} : ''); $this->fw->set('inc', 'components/value.html'); } else { \helpers\Msg::error('read_no_rights'); $this->fw->error(401); } }
/** * Проверяет права на выполнение действия * @param int $owner_id - ID пользователя, с объектом которого выполняется действие, если null, то используется определённый в beforeroute() * @param string $action - Действие, одна из констант \models\ACL::ACTION_* * @return bool Можно или нет выполнить действие * @todo Перенести в модель? * */ protected function checkAccess($action, $owner_id = null) { return \models\ACL::getInstance()->check($this->user_group_id, \models\ACL::OBJECT_STATICBLOCK, '', $action); }
/** * Устанвливает пользовательское меню */ protected function setAccountMenu() { $menu = []; $rules = ACLdata::getInstance()->getRules($this->user_group_id); // Модерирование комментариев if (in_array('comment', $rules[ACLdata::RELATION_NO][ACLdata::ACTION_MODERATION])) { $has_comments = \models\meta\Meta::getInstance()->getListBySetting('is_commentable', true); if (!empty($has_comments)) { array_push($menu, ['type' => 'header', 'title' => $this->fw->get('i18n.user.menu.moderation')]); $count_comments = \models\Comments::getCountWaiting(); array_push($menu, ['object' => 'comments', 'action' => 'moderation', 'icon' => 'fui-checkbox-checked', 'title' => $this->fw->get('i18n.user.menu.comments.title'), 'count' => array_sum($count_comments)]); array_push($menu, ['type' => 'divider']); } } $read_rules = array_merge($rules[ACLdata::RELATION_NO][ACLdata::ACTION_READ], $rules[ACLdata::RELATION_OWN][ACLdata::ACTION_READ], $rules[ACLdata::RELATION_REF][ACLdata::ACTION_READ], $rules[ACLdata::RELATION_PARENT][ACLdata::ACTION_READ]); $read_admin = $rules[ACLdata::RELATION_NO][ACLdata::ACTION_READ]; if (in_array('_user', $read_rules)) { array_push($menu, array('object' => 'user', 'href' => '/account/user', 'icon' => 'fui-user', 'title' => $this->fw->get('i18n.user.menu.users.title'))); } // TODO: проверить // if ($this->fw->exists('importer')) { // $this->fw->config($this->fw->get('ROOT') . '/../' . APP_FOLDER . '/cfg/importer.ini'); // $menu = array_merge($menu, Importer::getMenu()); // } $content = array(); $tmp = \models\meta\Meta::getInstance()->getList(); foreach ($tmp as $v) { $table = $v->get('table'); if ($table != '_user_profile' && in_array($table, $read_rules)) { $model = \models\ContentList::getInstance($table); $content[$v->get('title')] = array('object' => 'content', 'params' => 'table=' . $table, 'icon' => 'fui-list', 'title' => !is_null($v->get('title_pl')) ? $v->get('title_pl') : $v->get('title'), 'count_own' => $model->getCount(['user_id=?', $this->user_id]), 'count' => $read_admin ? $model->getCount() : ''); } } if (!empty($content)) { ksort($content); array_unshift($content, ['type' => 'header', 'title' => $this->fw->get('i18n.user.menu.content.list')]); $menu = array_merge($menu, $content); } if (in_array('_group', $read_rules) || in_array('_acl', $read_rules)) { $menu = array_merge($menu, array(['type' => 'divider'], ['type' => 'header', 'title' => $this->fw->get('i18n.user.menu.rights.title')])); if (in_array('_group', $read_rules)) { $menu = array_merge($menu, array(array('object' => 'group', 'icon' => 'fui-list-thumbnailed', 'title' => $this->fw->get('i18n.user.menu.groups.title')))); } if (in_array('_acl', $read_rules)) { $menu = array_merge($menu, array(array('object' => 'acl', 'icon' => 'fui-list-thumbnailed', 'title' => $this->fw->get('i18n.user.menu.acl.title')))); } } if (in_array('_service', $read_rules)) { $menu = array_merge($menu, array(['type' => 'divider'], ['type' => 'header', 'title' => $this->fw->get('i18n.user.menu.service.title')], array('object' => 'static_blocks', 'icon' => 'fui-list-thumbnailed', 'title' => $this->fw->get('i18n.user.menu.static.title')), array('object' => 'static_places', 'icon' => 'fui-list-small-thumbnails', 'title' => $this->fw->get('i18n.user.menu.static.places.title')), array('object' => 'service', 'action' => 'resetcache', 'icon' => 'glyphicon glyphicon-refresh', 'title' => $this->fw->get('i18n.cache.reset.title')), array('object' => 'service', 'action' => 'phpinfo', 'icon' => 'fui-info', 'title' => 'PHPINFO'), array('object' => 'meta', 'icon' => 'fui-gear', 'title' => $this->fw->get('i18n.user.menu.contentmeta.title')), array('object' => 'comments', 'icon' => 'fui-gear', 'title' => $this->fw->get('i18n.user.menu.comments.title')))); } //\helpers\Debug::prePrintR($this->fw->get('PARAMS')); for ($i = 0; $i < count($menu); $i++) { if (isset($menu[$i]['href']) && $menu[$i]['href'] == $this->fw->get('PARAMS.0')) { $menu[$i]['class'] = 'active'; } } $this->fw->set('MENUS.account', $menu); $this->fw->set('html.account_js', true); }
/** * Устанавливает массив с данными для генерации AJAX-полей */ protected function setAJAXFields() { $rules = \models\ACL::getInstance()->getRulesByAction($this->user_group_id, \models\ACL::ACTION_READ); \models\Content::setAjaxFields($this->table, $rules); if ($this->tableMeta->isTree()) { // Добавляем в контроллере, так как $this->pid устанавливается в контроллере. $this->fw->push('ajax_fields', ['name' => 'pid', 'value' => $this->pid, 'type' => 'hidden']); } self::setAjaxFieldsPost(); }
/** * Проверяет права на выполнение действия * @param int $owner_id - ID пользователя, с объектом которого выполняется действие, если null, то используется определённый в beforeroute() * @param string $action - Действие, одна из констант \models\ACL::ACTION_* * @return bool Можно или нет выполнить действие * @todo Перенести в модель? * */ protected function checkAccess($action, $owner_id = null) { $relation = \models\ACL::getInstance()->getRelation($this->user_id, is_null($owner_id) ? $this->owner_id : $owner_id); return \models\ACL::getInstance()->check($this->user_group_id, $this->model->getTable(), $relation, $action); }