auth #3
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
//ЭТОТ ПОСРЕДНИК ПРИМЕНЯЕТСЯ В WEB РОУТАХ И В API ЕНДПОИНТАХ ПОКА ТОЛЬКО ПРИЛОЖЕНИЯ ТАКСИ, НО ПО ЛОГИКЕ, ЕГО НУЖНО ИСПОЛЬЗОВАТЬ ВО ВСЕХ БУДУЩИХ МОДУЛЯХ. С ЕГО ПОМОЩЬЮ ПРОВЕРЯЕТСЯ КАЖДЫЙ ЗАПРОС К МОДУЛЮ - ВООБЩЕ ЕСТЬ ДОСТУП У ПОЛЬЗОВАТЕЛЯ ИЛИ НЕТ
|
||||
//В KERNEL У ЭТОГО ПОСРЕДНИКА ПРОПИСАН АЛИАС, КОТОРЫЙ УКАЗЫВАЕТСЯ УЖЕ В MODULE/ROUTES/WEB.PHP И API.PHP
|
||||
|
||||
/**
|
||||
* Посредник проверки доступа пользователя к приложению
|
||||
*/
|
||||
class CheckUserAppAccess
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$moduleName = explode('/', $request->route()->getPrefix());
|
||||
$moduleName = end($moduleName) ?? null;
|
||||
if ($moduleName) {
|
||||
if (array_key_exists($moduleName, UserContext::getUserAppPermissions()) !== false) {
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
//Если ошибка при обращении к api ендпоинту
|
||||
if ($request->expectsJson()) {
|
||||
return response()->json(['message' => "Ошибка! Приложение недоступно"], 403);
|
||||
//Если ошибка при обращении к web роуту
|
||||
} else {
|
||||
#Гаврилов
|
||||
//ЕСЛИ ВЫЗЫВАЕТСЯ WEB РОУТ НЕ С ФРОНТА, ТО ПРОИСХОДИТ РЕДИРЕКТ БЕЗ УКАЗАНИЯ ТЕКСТА ОШИБКИ. нАПРИМЕР, ПРИ РЕДИРЕКТЕ НИЖЕ НА СТРАНИЦУ МЕНЮ, ПОЛЬЗОВАТЕЛЬ НЕ УВИДИТ НИКАКОГО ОПОВЕЩЕНИЯ ОБ ОШИБКЕ
|
||||
//ЭТУ ПРОБЛЕМУ Я ИСПРАВЛЯЛ, ЧЕРЕЗ ГЕНЕРАЦИЮ НОТИФИКАЦИЙ НА БЭКЕ И ДОБАВЛЕНИЯ ИХ В ОПРЕДЕЛЕННУЮ ОЧЕРЕДЬ REDIS, КОТОРУЮ ЧИТАЕТ КАЖДАЯ СТРАНИЦА ПРИ ПЕРВИЧНОМ РЕНДЕРИНГЕ. НАДО ПОСМОТРЕТЬ ГДЕ Я УЖЕ ТАКОЕ РЕАЛИЗОВЫВАЛ
|
||||
return redirect('/menu');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user