Ich habe eine Rolle Administrator, Moderator und Mitglied in meiner Laravel-Anwendung. Anwendung haben Front- und Backend-Abschnitte. Ich möchte den Zugriff auf den Backend-Bereich nur für Administrator und Moderator erlauben. Ich schaffe SuperUsersMiddleware:Laravel 5.2 Controller Middleware für mehr als eine Rolle
<?php
namespace CMS\Http\Middleware;
use Closure;
class SuperUsersMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $request->user()->hasRole('administrator') || ! $request->user()->hasRole('moderator')) {
return redirect('/');
}
return $next($request);
}
}
Register in Kernel.php:
......
protected $routeMiddleware = [
'superusers' => \CMS\Http\Middleware\SuperUsersMiddleware::class,
'administrator' => \CMS\Http\Middleware\AdminMiddleware::class,
'moderator' => \CMS\Http\Middleware\ModeratorMiddleware::class,
'auth' => \CMS\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \CMS\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
.....
und in meinem Back-End-Ordner erstelle ich Controller.php (alle anderen Controller in Back-End-Abschnitt erweitert diese Controller) und in __construct() Funktionssatz Middleware:
...
public function __construct()
{
$this->middleware('superusers');
}
...
Aber das funktioniert nicht für mich. Ich erstelle auch Administrator und Moderator Middleware und es funktioniert separat, aber ich brauchte beide - zusammen. Wie geht das? Ich tray:
public function __construct()
{
$this->middleware('administrator');
$this->middleware('moderator');
}
Aber das kann auch nicht funktionieren. Was ist eine Best Practice für diese Situation?