Laravel 不同中间件的相同路由
Laravel same route for different middlewares
我对路由和中间件有疑问。我有 5 个中间件角色。 Administravimas,birstonas_biblioteka,druskininkai_biblioteka,birstonas_registratura,druskininkai_registratura。
问题是一些相同的路由可以访问多个角色。但是当我向不同的中间件声明相同的路由时,只有其中一个可以访问,当我使用或在具有多个中间件的路由中时,每个角色都可以访问路由。
中间件代码 Administravimas:
class Administravimas
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
//$collection = DB::table('roles_users')->select('*')->get
//dd($userRoles);
if(!$userRoles->contains('Administravimas'))
{
return redirect('/prieiga-nesuteikta');
}
return $next($request);
}
}
中间件代码birstonas_registratura
public function handle($request, Closure $next)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
//$collection = DB::table('roles_users')->select('*')->get
//dd($userRoles);
if(!$userRoles->contains('Birštonas registratūra'))
{
return redirect('/prieiga-nesuteikta');
}
return $next($request);
}
网络路由:
Route::group(['middleware' => 'Administravimas' OR 'birstonas_registratura'], function () {
Route::get('books', 'BookController@index')->name('books');
Route::post('books', 'BookController@add')->name('book.add');
});
内核:
'Administravimas' => \App\Http\Middleware\Administravimas::class,
'birstonas_biblioteka' => \App\Http\Middleware\BirstonasBiblioteka::class,
'druskininkai_biblioteka' => \App\Http\Middleware\DruskininkaiBiblioteka::class,
'birstonas_registratura' => \App\Http\Middleware\BirstonasRegistratura::class,
所以我如何只为某些团体而不是所有团体声明相同的路线。
你可以给中间件传递参数,所以你可以做一个中间件,你可以传递你想要允许的所有角色的名字:
public function handle($request, $next, ...$roles)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
foreach ($roles as $role) {
if ($userRoles->contains($role)) {
// they have the current iterated role
// let them pass through
return $next($request);
}
}
// they don't have any of these roles
// redirect away
}
然后分配你的中间件:
`rolescheck:Admin,student`
使用您当前拥有的作为基础示例。
$userRoles = Auth::user()->roles()->pluck('pavadinimas')
上面为什么使用pluck & pavadinimas 是字段名?为什么我们使用这个
我对路由和中间件有疑问。我有 5 个中间件角色。 Administravimas,birstonas_biblioteka,druskininkai_biblioteka,birstonas_registratura,druskininkai_registratura。
问题是一些相同的路由可以访问多个角色。但是当我向不同的中间件声明相同的路由时,只有其中一个可以访问,当我使用或在具有多个中间件的路由中时,每个角色都可以访问路由。
中间件代码 Administravimas:
class Administravimas
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
//$collection = DB::table('roles_users')->select('*')->get
//dd($userRoles);
if(!$userRoles->contains('Administravimas'))
{
return redirect('/prieiga-nesuteikta');
}
return $next($request);
}
}
中间件代码birstonas_registratura
public function handle($request, Closure $next)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
//$collection = DB::table('roles_users')->select('*')->get
//dd($userRoles);
if(!$userRoles->contains('Birštonas registratūra'))
{
return redirect('/prieiga-nesuteikta');
}
return $next($request);
}
网络路由:
Route::group(['middleware' => 'Administravimas' OR 'birstonas_registratura'], function () {
Route::get('books', 'BookController@index')->name('books');
Route::post('books', 'BookController@add')->name('book.add');
});
内核:
'Administravimas' => \App\Http\Middleware\Administravimas::class,
'birstonas_biblioteka' => \App\Http\Middleware\BirstonasBiblioteka::class,
'druskininkai_biblioteka' => \App\Http\Middleware\DruskininkaiBiblioteka::class,
'birstonas_registratura' => \App\Http\Middleware\BirstonasRegistratura::class,
所以我如何只为某些团体而不是所有团体声明相同的路线。
你可以给中间件传递参数,所以你可以做一个中间件,你可以传递你想要允许的所有角色的名字:
public function handle($request, $next, ...$roles)
{
$userRoles = Auth::user()->roles()->pluck('pavadinimas');
foreach ($roles as $role) {
if ($userRoles->contains($role)) {
// they have the current iterated role
// let them pass through
return $next($request);
}
}
// they don't have any of these roles
// redirect away
}
然后分配你的中间件:
`rolescheck:Admin,student`
使用您当前拥有的作为基础示例。
$userRoles = Auth::user()->roles()->pluck('pavadinimas')
上面为什么使用pluck & pavadinimas 是字段名?为什么我们使用这个