Как подружить RBAC и PJAX

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Randomize
Сообщения: 4
Зарегистрирован: 2016.09.26, 16:21

Как подружить RBAC и PJAX

Сообщение Randomize »

Решил научиться работать с Pjax и столкнулся с такой трудностью: если к странице ограничен доступ с помощью ролей, то Pjax перестаёт работать и перезагружает страницу.
Я так понимаю это не баг а фича для безопасности? :|
И как тогда правильно использовать ajax для динамического обновления контента в бекенд части?

Контроллер

Код: Выделить всё

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),                
                'rules' => [                    
                    [
                        'actions' => ['index'],
                        'allow' => true,
                        'roles' => ['manager'],           //объявление роли 
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }
public function actionIndex()
    {
        //$this->layout = 'default';
        return $this->render('index',[
            'time' => date('H:i:s'),
        ]);
    }
Подключение во вьюшке

Код: Выделить всё

<?php
use yii\helpers\Html;
use yii\widgets\Pjax;
?>
<?php Pjax::begin(); ?>
    <?= Html::a(
        'Обновить',
        ['site/index'],
        ['class' => 'btn btn-lg btn-primary']
    ) ?>
    <p>Время сервера: <?= $time ?></p>
<?php Pjax::end(); ?>
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Как подружить RBAC и PJAX

Сообщение Onotole »

Pjax работает только есть сервер отдает статус 200
Randomize
Сообщения: 4
Зарегистрирован: 2016.09.26, 16:21

Re: Как подружить RBAC и PJAX

Сообщение Randomize »

Onotole писал(а):Pjax работает только есть сервер отдает статус 200
Но сервер отдает статус 200, но PJAX по прежнему не работает.

(почему то не смог приложить скриншот во вложении)
https://yadi.sk/i/Dav_YcT4vmu93
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Как подружить RBAC и PJAX

Сообщение Onotole »

Randomize писал(а):
Onotole писал(а):Pjax работает только есть сервер отдает статус 200
Но сервер отдает статус 200, но PJAX по прежнему не работает.

(почему то не смог приложить скриншот во вложении)
https://yadi.sk/i/Dav_YcT4vmu93
Смотрите ответ в консоли браузера. Pjax работает асинхронно
Randomize
Сообщения: 4
Зарегистрирован: 2016.09.26, 16:21

Re: Как подружить RBAC и PJAX

Сообщение Randomize »

Действительно возвращает Canсeled в статусе. https://yadi.sk/i/KPdYK3kYvmxkj

Просто мне так и не ответили это хорошо или плохо что pjax не работает в админке? так должно быть? или я что-то делаю не так?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Как подружить RBAC и PJAX

Сообщение Onotole »

Админка, права или что-то там тут не при чем
Randomize
Сообщения: 4
Зарегистрирован: 2016.09.26, 16:21

Re: Как подружить RBAC и PJAX

Сообщение Randomize »

Благодарю за помощь.
Как оказалось всё дело в таймауте.
Я работаю на денвере и обращения в базу данных для проверки роли пользователя занимает больше двух секунд.
В Pjax по умолчанию таймаунт одна секунда, если ответ от сервера не пришел за это время, он отключается.
Надеюсь после переноса на нормальный хостинг быстродействие работы базы данных увеличится.
Пока решил проблему таким образом:

Код: Выделить всё

<?php Pjax::begin(['timeout' => 5000 ]); // добавил свойство ?>

    <?= Html::a(
        'Обновить',
        ['site/index'],
        ['class' => 'btn btn-lg btn-primary']
    ) ?>

    <p>Время сервера: <?= $time ?></p>
<?php Pjax::end(); ?>
Тему я думаю можно закрыть.
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Как подружить RBAC и PJAX

Сообщение girmate »

Randomize писал(а):Благодарю за помощь.
Как оказалось всё дело в таймауте.
Я работаю на денвере и обращения в базу данных для проверки роли пользователя занимает больше двух секунд.
В Pjax по умолчанию таймаунт одна секунда, если ответ от сервера не пришел за это время, он отключается.
Надеюсь после переноса на нормальный хостинг быстродействие работы базы данных увеличится.
Пока решил проблему таким образом:

Код: Выделить всё

<?php Pjax::begin(['timeout' => 5000 ]); // добавил свойство ?>

    <?= Html::a(
        'Обновить',
        ['site/index'],
        ['class' => 'btn btn-lg btn-primary']
    ) ?>

    <p>Время сервера: <?= $time ?></p>
<?php Pjax::end(); ?>
Тему я думаю можно закрыть.
Если работаете в windows 7 и при любом обращении к БД у вас задержка минимум 1 сек, то необходимо скачать Fix от Microsoft для выбора приоритета IPv4. Тогда задержки уйдут.
Осторожно! Вы общаетесь с новичком ;)
Ответить