Codeigniter: Как обрабатывать прямую ссылку на контроллер / функцию / параметр? - PullRequest
3 голосов
/ 06 апреля 2010

У меня есть простая функция контроллера, которая удаляет запись в БД (для этого она использует функцию модели). У меня есть ссылка на это в одном из моих представлений (например, http://www.example.com/item/delete/3), и я использую jQuery для отображения диалогового окна подтверждения, чтобы убедиться, что пользователь действительно хочет удалить его. Все хорошо. Однако, если вы просто введете это URL в вашем браузере, элемент удаляется без предупреждения.

Есть ли способ справиться с этим в коде функции контроллера или в модели?

Ответы [ 4 ]

0 голосов
/ 07 апреля 2010

Для операции удаления я бы сделал сообщение HTTP.

function delete()
{
    if ($id = $this->input->post('id'))
    {
        $this->item_model->delete_item($id);
    }
}

И тогда мой JQuery сделает HTTP-сообщение.

$.ajax({
    type: 'POST',
    url: 'item/delete',
    data: {id:item_id}
});

Таким образом, клиент не сможет случайно удалить элемент, перейдя по URL в своем веб-браузере.

0 голосов
/ 07 апреля 2010

Мне кажется, я понял это, и это делает функцию приватной в контроллере, т.е.

function _delete($id) {
 ...delete code goes here...
}
0 голосов
/ 07 апреля 2010

Это через AJAX-запрос?Если это так, я бы отправил данные для удаления через POST вместо GET, чтобы к ним нельзя было напрямую перейти.

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

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

0 голосов
/ 06 апреля 2010

Вы можете предотвратить это, добавив эту строку в начало файла модели и контроллера ( Пост форума CI ).

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class SomeModel extends Model
{
// model code
}
?>

Это гарантирует, что CI был загружен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...