Модель ввода и редактирования подписок |
В рассматриваемом здесь представлении из модели вызываются методы getForm (), getltem() и getStateO, поэтому рассмотрим далее класс модели JoomproSubsModelSubscription, объявляемый в файле models/subscription.php. Напомним, что методы getForm() и getltem() наследуются в этом классе модели из классов JModelAdmin и JModel соответственно. Кроме того, в нем определяются еще шесть методов. В первой части файла models/subscription.php определяется сам класс модели, а также метод Метод canDelete () вызывается при выполнении задачи. В нем просто проверяется, разрешено ли пользователю удалить элемент. Однако эта проверка полномочий производится лишь на уровне категории. В Joomla система списков контроля доступа (ACL) имеет иерархический характер, и поэтому полномочия достаточно проверить лишь на уровне категории. Так, если на уровне категории не установлены полномочия на выполнение данного действия, автоматически будут унаследованы полномочия, заданные на уровне компонента. Это избавляет от необходимости проверять полномочия на обоих уровнях иерархии доступа. Далее в рассматриваемом здесь классе модели определяется метод /** * Метод для проверки возможного изменения состояния записи. * @param object Объект записи. * @return boolean Истинно, если разрешается изменить состояние записи. По умолчанию соответствует полномочиям, установленным на уровне компонента. */ Этот метод вызывается всякий раз, когда изменяется состояние "опубликовано" редактируемого элемента. И в этом методе только проверяется, разрешено ли пользователю изменить состояние данного элемента. Ниже приведен исходный код следующего далее метода getTable (). /** * Возвращает ссылку на объект типа Table и всегда создает его. * @param type Тип таблицы для получения экземпляра ее объекта. * @param string Необязательный префикс для имени табличного класса. * @param array Необязательный массив конфигурации модели. * @return JTable Объект базы данных. */ Этот метод вызывается всякий раз, когда предполагается запись данных в таблицу. Он всего лишь предоставляет нужное имя таблицы и получает экземпляр ее объекта из класса JTable. Далее следует приведенный ниже метод /** * Метод для получения формы записи. * @param array $data Необязательный массив данных для опроса в форме. * @param boolean loadData Истинно, если в форму должны быть загружены ее собственные данные (по умолчанию), иначе — ложно. * @return JForm Объект типа JForm, возвращаемый при успешном завершении операции, иначе — логическое значение false. */ Этот метод вызывается в двух местах цикла.
В этом методе сначала получаются данные для формы и проверяются полномочия пользователя на редактирование или создание элемента. Затем в нем проверяется, разрешено ли пользователю редактировать состояние подписки. Если у него нет таких полномочий, то выполняются следующие действия. Поля формы делаются недоступными и не отображаются в форме, для чего в атрибуте disabled устанавливается логическое значение true. Любые изменения, которые могут быть внесены в этих полях, отфильтровываются, для чего в атрибуте filter устанавливается значение unset. Как пояснялось ранее, вводимые пользователем данные следует непременно проверить на достоверность, прежде чем приступать к их обработке. Даже если форма и не допускает ввод пользователем определенной информации, злоумышленник может без особого труда видоизменить разметку веб-страницы в коде HTML, чтобы внести изменения в форму и обойти данную проверку. Именно поэтому необходимо также проверять введенные в форме значения после ее передачи на обработку. Класс JForm позволяет очень просто организовать такую проверку. Установкой значения "unset" в атрибуте filter классу JForm предписывается удалить любые данные, которые могли быть введены пользователем. В этом случае можно выяснить, что эти данные могли быть введены в браузере кем-то, видоизменившим форму после того, как поля формы были сделаны недоступными для ввода в обычном режиме. Эта надежная мера защиты от подобного рода злонамеренных попыток реализуется в коде данного класса, не требуя дополнительной проверки. Она служит характерным примером применения класса JForm для динамического изменения состояния и защиты от взлома. Далее следует приведенный ниже метод /** * Метод для получения данных, которые должны быть внесены в форму. * @return mixed Данные для формы. */ Сначала в этом методе получаются любые данные, которые могли быть сохранены в текущем сеансе работы. Напомним, что это делается для того, чтобы пользователю не пришлось еще раз заполнять форму полностью, если данные в каком-нибудь из ее полей окажутся недействительными. Если же в текущем сеансе работы не окажется введенных данных, они получаются с помощью метода get Item (). А если вводится новый элемент содержимого, то проверяется потребность его фильтрации по категории, и в таком случае идентификатор категории выбирается для формы по умолчанию. И в последней части рассматриваемого здесь класса определяется метод prepare /** * Подготавливает и подвергает таблицу дополнительной обработке перед сохранением. */ В этом методе проверяется, насколько безопасным для URL может оказаться столбец alias, содержащий псевдоним в подготавливаемой таблице. Ведь псевдоним используется в URL, если установлена кнопка-переключатель Yes параметра Search Engine Friendly URLs на вкладке SEO диалогового окна Global Configuration. Кроме того, URL автоматически устанавливается по названию подписки, если псевдоним не задан. В этом случае пользователь может пропустить поле ввода псевдонима, если желает употреблять название в качестве псевдонима.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |