Cakephp 3.6.17: переупорядочение таблицы при перетаскивании не работает правильно при развертывании на сервере - PullRequest
0 голосов
/ 30 января 2019

Я работаю над проектом CakePHP на локальном хосте, где я реализую переупорядочение методом перетаскивания в таблице с помощью jQuery.Ограничение состоит в том, что только администраторы могут переупорядочивать элементы таблицы. Если пользователь не является администратором, то будет отображаться сообщение об ошибке.На localhost он работает как положено, но при его развертывании на сервере пользователи, не являющиеся администраторами, получают сообщение об успехе, а изменение порядка не применяется.Поэтому я думаю, что с ответом что-то не так.

Вот мой код:

view.ctp

<script type="text/javascript">
    var csrfToken = <?= json_encode($this->request->getParam('_csrfToken')) ?>;
    $( ".row_position" ).sortable({
        delay: 150,
        stop: function() {
            var selectedData = new Array();
            $('.row_position>tr').each(function() {
                selectedData.push($(this).attr("id"));
            });
            updateOrder(selectedData);
        }
    });


    function updateOrder(data) {
        $.ajax({
            headers: {
                'X-CSRF-Token': csrfToken
            },
            url:'/app/users/updateTasksOrder',
            type:'post',
            data:{position:data},
            success:function(){
                alert('Your change successfully saved');
                location.reload();
            },
            error:function(){
                alert('Your change failed. Only Admins or Project Managers can change the order');
                location.reload();
            }
        })
    }
</script>

контроллер.php

public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
    if($this->Auth->user('role_id')==1 or $this->Auth->user('role_id')==2){ //1 admin, 2 project manager
        $this->Auth->allow('updateTasksOrder');
        $this->set('is_admin', true);            
    }
    else
    {
        if($this->request->is('ajax')) {
            $this->response->type('json');
            $this->response->statusCode(401);
            $this->response->body(json_encode(array('status' => 'ERROR', 'message' => 'Unauthorized')));
            $this->response->send();
            $this->_stop();
        }
        if($this->request->getParam('action') === 'delete'){
            $this->Flash->error(__('You are not authorized to perform this action'));
            return $this->redirect(['controller' => 'Users', 'action' => 'index']);
        }
        $this->set('is_admin', false);
    }

} 
...