Приложих междинен софтуер за определяне на ролята и валидността на потребителския токен, изпратен в заглавката на заявката.
<?php
namespace App\Middleware;
class AuthenticationMiddleware extends Middleware {
//Invoke magic method for all middlewares in Slim
//Next is the next middle
public function __invoke($request, $response, $next) {
$role = $this->container->authentication->isAuthenticatedForAdminSite($request);
//$role = 'Admin';
if(!isset($role)) {
return $response->withRedirect('login');
}
$this->container->authentication->adminRole = $role;
$response = $next($request, $response);
return $response;
}
}
Следната функция връща името на ролята (администратор, модератор, клиент и т.н.)
$this->container->authentication->isAuthenticatedForAdminSite($request)
Ако не върне нищо, потребителят се пренасочва към страницата за вход, ако не, трябва да запазя стойността на to role в ivar adminRole при удостоверяване. Причината е, че когато изобразявам страницата си, трябва да определя вида на ролята, за да реша какъв вид навигационна лента трябва да показва страницата.
Проблемът възниква в контролера за функцията за маршрутизиране.
public function getOrders($request, $response) {
$role = $this->container->authentication->adminRole;
return $this->container->view->render($response, 'orders.html', ['orders' => getOrdersForAdmin("%", $this->container->db), 'role' => $role]);
}
$role винаги е NULL, когато тествам приложението на моя споделен хост, но работи добре, когато тествам приложението на localhost.