CakePHP: пост-запрос Ajax выдает ошибку 403 (все разрешения предоставлены) - PullRequest
0 голосов
/ 02 января 2019

Ajax-запрос в проекте Cakephp выдает ошибку 403, все разрешения предоставлены для каталога проекта в localhost (XAMPP)

Не удалось загрузить ресурс: сервер ответил с состоянием 403 (запрещено)/ project / users / saveOrder: 1

var request = function() {
            $.ajax({
                beforeSend: function() {
                    messageBox.text('Updating the sort order in the database.');
                },
                complete: function() {
                    messageBox.text('Database has been updated.');
                },
            data: 'sort_order=' + sortInput[0].value + '&ajax=' + submit[0].checked + '&do_submit=1&byajax=1', //need [0]?
            type: 'post',
            url: '/project/users/saveOrder',

        });
        }; 

CODE UsersController:

class UsersController extends AppController
{
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('saveOrder');
    }

    public function view($id = null)
    {
        $user = $this->Users->get($id, [
            'contain' => ['Departments', 'Appointments', 'Roles', 'LeaveRequests', 'TasksTo', 'TasksFrom', 'TasksBy']
        ]); 
        $this->set('user', $user);
    }

    public function change(){
    }
    public function saveOrder() {
        $this->layout = null; 
        if ($this->request->is('post'))
        {

            $ids = explode(",", $this->request->data['priority']); 
            //print_r($ids); die;
            /* run the update query for each id */
            foreach ($ids as $index => $id) {
                if (isset($id) && !empty($id)) {
                    $query = 'UPDATE tasks SET priority = ' . ($index + 1) . ' WHERE id = ' . $id;
                    //$result = mysql_query($query) or die(mysql_error() . ': ' . $query);
                    $data['id'] = $id;
                    $data['priority'] = $index + 1;
                    $this->Task->id = $data['id'];
                    if($this->Task->saveField('priority', $data['priority'])) {
                         echo $query.'<br/>';
                    }else {
                          die('Error, insert query failed');
                    } 
                }
            }
            die;
        }
     }

}

1 Ответ

0 голосов
/ 02 января 2019

Вы столкнулись с этой проблемой, потому что вы не разрешили функцию, которую вы используете в ajax url

Разрешите эту функцию в вашем beforeFilter() в вашем контроллере, а затем передайте имя функции внутри

$this->Auth->allow()

Пример

public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('saveOrder');
 }

Для получения дополнительной информации о $this->Auth->allow()

$this->Auth->allow(); //Allow all action define in your controller

$this->Auth->allow('editUser'); //Allow only editUser 

$this->Auth->allow(['editUser', 'AddUser']); //Allow only editUser and AddUser

Для торта 3

  1. Поместите это в верхней части вашего контроллера use Cake\Event\Event;
  2. Теперь добавьте это к функции фильтра

    публичная функция beforeFilter (Event $ event) {

    parent::beforeFilter($event);
    $this->Auth->allow('saveOrder');
    

    }

...