【发布时间】:2019-06-07 03:15:53
【问题描述】:
我是 Laravel 的初学者。 我在 Laravel 5.8 中有项目。
我有这个代码:
中间件:
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole([$role])) {
if( $role == 'admin' || $role== 'receptionist' || $role == 'adminCompany' || $role == 'telemarketer')
{
return redirect('/cms');
}
else
{
return redirect()->route('index');
}
}
return $next($request);
}
}
播种机:
public function run()
{
DB::table('roles')->insert([
'name' => 'admin'
]);
DB::table('roles')->insert([
'name' => 'adminCompany'
]);
DB::table('roles')->insert([
'name' => 'telemarketer'
]);
DB::table('roles')->insert([
'name' => 'receptionist'
]);
DB::table('roles')->insert([
'name' => 'user'
]);
DB::table('roles')->insert([
'name' => 'userPremium'
]);
DB::table('roles')->insert([
'name' => 'userCompany'
]);
DB::table('roles')->insert([
'name' => 'userSponsor'
]);
DB::table('roles')->insert([
'name' => 'userGuest'
]);
}
架构:
Schema::create('roles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->engine = "InnoDB";
});
还有我的 web.php:
Route::group(['prefix' => 'admin'], function () {
Route::get('/', 'BackendController@index')->name('adminHome')->middleware('CheckRole:user,CheckRole:userPremium,CheckRole:userCompany,CheckRole:userSponsor,CheckRole:userGuest');
});
用户.php
public function hasRole(array $roles)
{
foreach ($roles as $role) {
if (isset(self::$roles[$role])) {
if (self::$roles[$role]) return true;
} else {
self::$roles[$role] = $this->roles()->where('name', $role)->exists();
if (self::$roles[$role]) return true;
}
}
return false;
}
我希望 CheckRole 中间件检查用户是否具有以下角色:用户、userPremium、userCompany、userSponsor、userGuest 用于路由 adminHome。目前,Laravel 只检查 1 个角色——不是全部。
如何修复?
【问题讨论】:
-
您是否使用角色包?
-
不,我使用我的代码
-
可以显示用户类
hasRole方法吗? -
是的,我将其添加到主帖