Ограничить пользователя для прямого редактирования записи, изменив значение ID в URL-адресе.?
На самом деле, я создаю компонент, в котором я сталкиваюсь с проблемой, чтобы ограничить пользователя бэкэнда прямым редактированием записи.
Я знаю Когда мы редактируем запись в joomla с помощью функции «controller.edit», она использует функцию HoldEditId () для хранения текущего идентификатора в userstate, переданного с использованием url
Я использую значение, хранящееся с помощью функции HoldEditId () в модели, чтобы проверить, идентичен ли идентификатор URL-адреса в переменной UserState для загрузки правильных данных записи.
Но HoldEditId не только удерживает текущее значение, но и удерживает последний отредактированный идентификатор записи, теперь проблема заключается в том, как я могу узнать, который в настоящее время хранится id и который последний раз вставлен id
, поэтому решение состоит в том, чтобы удалить старые значения, используя функцию holdeditid, когда пользователь нажимает кнопку закрытия или отмены, но как я могу это сделать, и если это правильно или я делаю очень неправильно, есть еще один простой способ .?
1 ответ
Вот как вы должны загрузить свой текущий идентификатор записи из состояния в классе модели.
$pk = (!empty($pk)) ? $pk : (int) $this->getState($this->getName() . '.id');
Если вы хотите получить последнее отредактированное значение в своей функции holdEditId, вы можете использовать:
$recordId = array_pop($values)
Но в идеале вам не нужно вообще переопределять функцию holdEditId. Вам необходимо передать идентификатор в своем URL-адресе, чтобы он автоматически заселялся в вашей модели.
Это происходит в функции populateState вашей модели, если она расширяет JModelAdmin. Вы можете переопределить функцию populateState в своей модели, чтобы заполнить другие переменные, если вам нужно.