Комментарии

Задачи контроллера
( 0 Голосов )

Для ввода и редактирования подписки из панели инструментов на экране диспетчера выбираются задачи subscription.add и subscription.edit соответственно. Как пояснялось ранее, это означает, что для выполнения первой задачи вызывается метод add (), а для выполнения второй задачи — метод edit () из класса контроллера (в данном случае из класса JoomprosubsControllerSubscription, объявляемого в файле controllers/subscription.php).

Класс этого контроллера расширяет класс JControllerForm и лишь переопределяет два метода allowAdd () и allowEdit (), которые вызываются из методов add () и edit () класса JControllerForm для проверки полномочий пользователя на выполнение действий по вводу и редактированию подписки.

Ниже приведена первая часть исходного кода из файла controllers/subscription.php, где метод allowAdd () переопределяется в классе JoomprosubsControllerSubs-cription.

defined('_JEXEC)   or die;
jimport('j oomla.application.component.controllerform');
* Класс контроллера для компонента Joomprosubs.
*/ class JoomproSubsControllerSubscription extends JControllerForm
{ 
/** * Переменная списка представлений URL. * @var  string
*/ protected $view_list = 'submanager';
/** * Переопределяемый метод для проверки полномочий пользователя на ввод новой записи. * @param array $data  Массив исходных данных. * @return boolean
*/ protected function allowAdd($data = array()) {
// инициализировать переменные $user = JFactory::getUser(); categoryld = JArrayHelper:igetValue($data, 'catid',> JRequest: : getlnt ('filter_category_id') , ' int') ; $allow = null; if ($categoryId) {
// проверить категорию, если она передана в URL $allow = $user->authorise('core.create',
$this->option.'.category.'.$categoryId); } if ($allow === null) {
// вернуться к полномочиям на уровне компонента в отсутствие лучшей информации return parent::allowAdd($data); } else { return $allow; } }

В приведенном выше коде определяется сам класс и первый его метод. Следует также заметить, что в этом классе определяется поле $view_list, в котором устанавливается значение "submanager". В классе WeblinksControllerWeblink это поле не требовалось, поскольку для исходного представления по умолчанию выбиралось имя компонента в единственном числе (Weblink). Но в данном случае это правило не действует. Ведь если бы исходное представление называлось joomprosubs, поле $view_list или $default_view, определяемое в классе JoomproSubsController, не потребовалось бы. Но две лишние строки кода — совсем небольшая рлата за получение осмысленных имен класса и файла, а кроме того, имя submanager имеет больший смысл, чем имя j oomprosubs.

Метод allowAdd () очень похож на аналогичный метод из класса WeblinksControllerWeblink. В нем предпринимается попытка извлечь идентификатор категории из запроса. Он может быть получен в результате фильтрации исходных данных по категории. Если идентификатор категории обнаружен, то далее проверяется, разрешено ли текущему пользователю вводить элемент в этой категории. Если это ему не разрешено, то проверяются полномочия на уровне компонента, для чего вызывается метод allowAdd () из родительского класса.

В остальной части исходного кода рассматриваемого здесь класса переопределяется метод allowEdit (), как показано ниже.

/*
Переопределяемый метод для проверки полномочий пользователя
на редактирование записи.
@param array $data Массив исходных данных.
@param string $key Имя первичного ключа.
©return boolean */
protected function allowEdit($data = array(), $key = 'id') {

// инициализировать переменные $recordId = (int) isset($data[$key]) ? $data[$key] : 0; $categoryId = 0; ($recordId) { $categoryId = (int) $this->getModel()->get!tem($recordId)->catid; ($categoryId) {
// если категория задана, проверить полномочия на нее JFactory::getUser()->authorise('core.edit', $this->option.'.category.'.$categoryId); }  else   {
// вернуться к полномочиям на уровне компонента, поскольку ресурсы не отслеживаются return parent::allowEdit($data, $key);

Как правило, при выполнении этого метода уже должен быть в наличии достоверный идентификатор подписки. В данном случае идентификатор категории извлекается из подписки и затем проверяются полномочия текущего пользователя на редактирование подписок данной категории. Если же достоверный идентификатор подписки отсутствует по какой-нибудь причине, то проверяются полномочия данного пользователя на редактирование подписок на уровне компонента.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости