Laravel 5.1 использует сессию для ограничения прямого доступа, используя URL-адреса пользователей в зависимости от роли пользователя - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть 2 проекта laravel, 1 для внешнего интерфейса, где я использую HTML CSS Angularjs. Второй для контроллеров API. Я звоню с помощью http post и получаю функции контроллеров API с помощью angularjs для получения данных контента.

В интерфейсе у меня есть меню, это меню отображается по-разному в зависимости от роли пользователя, если администратор или нет.

Это сделано. У меня проблема с доступом к просмотрам по URL в браузере.

Итак, у меня есть запрос, где я получаю для каждого пользователя, какие модули в меню он может видеть. Теперь я помещаю результат в сессию Laravel.

$menu = DB::select menu by user id ... //Getting menu query based on user if admin or no

session(["menu" => $menu);
return session('menu');

Я получаю результаты, и на веб-сайте отображается хорошее меню, основанное на зарегистрированном пользователе, если он администратор или нет.

Теперь, чтобы решить проблему прямого доступа к URL, я хочу использовать этот сеанс и сравнить URL с этим сеансом. Если URL существует в сеансе, я разрешу ему доступ, если нет, я перенаправлю его на где-то. есть идеи?

1 Ответ

0 голосов
/ 27 апреля 2018

Я настоятельно рекомендую ознакомиться с документацией Laravel по авторизации, прежде чем заходить слишком далеко в пользовательскую реализацию:

https://laravel.com/docs/5.1/authorization

Не зная больше о том, как ваши интерфейсные и серверные приложения взаимодействуют друг с другом, немного сложно разобраться в спецификациях, но я сделаю все возможное.

Каждая страница, возвращаемая Laravel, имеет доступ к объекту Request, который содержит информацию о запросе, который вернул страницу. Вы можете получить доступ к этому Request и связанным с ним Route, используя вспомогательные функции Laravels (если вы еще не передаете его в представление). Метод getPrefix() возвращает корневой относительный URL-адрес, который затем можно использовать по своему усмотрению. Например:

// Return and store the URL as a string
$url = request()->route()->getPrefix();

// Check your session for the URL/s you want to allow and compare to the stored URL
if (session()->get('URL') == $url) {
    // User is allowed access to the page
    // Do something ...
} else {
    // User is not allowed access to this page
    // Redirect back or to a route of your choice
    return redirect()->back();
}

Я надеюсь, что это дает вам некоторые идеи, удачи!

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