:
namespace App\Http\Middleware;
use Auth;
use Closure;
use App\Role;
use Illuminate\Support\Collection;
class RoleMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $roles = null, $guard = null)
{
$roles = Role::whereIn('slug', explode('|', $roles))->get();
if (! Auth::guard($guard)->user()->hasRole($roles)) {
return abort(403, 'Forbidden');
}
return $next($request);
}
}
はその後、ユーザーが持っているかどうかを確認する方法を持っていることを確認したユーザモデルにKernel.php
'role' => \App\Http\Middleware\RoleMiddleware::class,
にミドルウェアを登録しますロールセット、例:
public function hasRole($role)
{
if (is_int($role)) {
return $this->roles->contains('id', $role);
}
if (is_string($role)) {
return $this->roles->contains('slug', $role);
}
if ($role instanceof Model) {
return $this->roles->contains('id', $role->id);
}
return !! $role->intersect($this->roles)->count();
}
そして、このようなミドルウェアを使用することができますS:
Route::group(['middleware' => ['auth', 'role:admin|staff'], ...);
あなたは|
で区切って自分の役割名とadmin|staff
を置き換えることができます。カスタムguard
を追加する場合は、それを2番目のパラメータとして渡すことができます。role:admin|staff,mycustomguard
パラメータを取るミドルウェアを作成し、パラメータとして 'roles'を渡すことができます。 – lagbox