@dev400

Как сделать безопасный редирект в админке?

Если не админ заходит в админку, то я вижу 2 варианта: или все view оборачивать условием(если существует сессия админа, то гуд, если нет, то ошибка), или во всех контроллерах сделать типо этого(та же самая обертка, по сути):
<?php
namespace Backend\Controllers;

use Common\Base\Controller;

class Index extends Controller
{

    public function index() {

        if ( !isset($_SESSION["admin"]) ) {

            parent::redirect("/admin/auth");

        } else {

            $this->view->render("site/index");

        }

    }

}

parent::redirect() :
protected function redirect($url)
	{
		if (headers_sent() === false)
		{
			header('Location: ' . $url, true, 302);
		}

		exit();
	}


Но все равно чувствую что что то не так делаю. Подскажите плз
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Сделать основной контроллер, остальные наследовать от него. В нем делать проверку и редиректить в контроллер авторизации, который можно не наследовать. В любом случае проверка во вью - не правильно.
Ответ написан
trevoga_su
@trevoga_su
зависит от задачи
у меня лично проверка прав - это безусловно проверка на уровне контроллера.
если прав нет - редирект с сообщением (пример - www.adverts.ru/admin/user - попытка доступа в админ, к модулю пользователей )
вот код если интересно

проверка на уровне вью нужна только тогда, когда пользователя надо куда-то пустить, но в зависимости от прав что то показывать, что то нет. вот пример - админ панель demo demo перейди в модуль пользователей. отобразится список, но ничего больше сделать не сможешь
Ответ написан
Комментировать
Arris
@Arris
Сапиенсы учатся, играя.
Например, так:
$phpauth_config = new PHPAuth\Config();
$phpauth = new Auth($dbi->getconnection(), $phpauth_config); 
$auth_userinfo  = $phpauth->getCurrentUserInfo();
if (!$auth_userinfo && ($auth_userinfo['permissions'] < ADMIN_ROOT_PRIVILEGE)) {
    redirect('/auth/login/');
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы