Routes 取决于用户角色的Laravel路由
我正在使用中间件为用户获取角色 问题是,我想如何使用路线。我希望每个用户都能够转到Routes 取决于用户角色的Laravel路由,routes,laravel-5.3,roles,middleware,laravel-middleware,Routes,Laravel 5.3,Roles,Middleware,Laravel Middleware,我正在使用中间件为用户获取角色 问题是,我想如何使用路线。我希望每个用户都能够转到/dashboard,它知道他们的角色,并将他们发送到正确的路径 调试后,我可以看到第一个路由被忽略,而最后一个路由被忽略,因此如果用户不是管理员,他们会收到一条错误消息,说权限不足 是否有一种方法可以调整我的中间件或路由,以便任何用户都可以转到/dashboard,并获得与其角色相关的路由 Routes.php Auth::routes(); Route::group([ 'prefix' => 'das
/dashboard
,它知道他们的角色,并将他们发送到正确的路径
调试后,我可以看到第一个路由被忽略,而最后一个路由被忽略,因此如果用户不是管理员,他们会收到一条错误消息,说权限不足
是否有一种方法可以调整我的中间件或路由,以便任何用户都可以转到/dashboard
,并获得与其角色相关的路由
Routes.php
Auth::routes();
Route::group([ 'prefix' => 'dashboard'], function () {
// User Dashboard
Route::get('/', ['as' => 'dashboard-user', 'middleware' => 'roles', 'roles' => ['user'], 'uses' => 'DashboardController@user']);
// Admin Dashboard
Route::get('/', ['as' => 'dashboard-admin', 'middleware' => 'roles', 'roles' => ['admin'], 'uses' => 'DashboardController@admin']);
});
CheckRole.php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->user() === null) {
return response("Insufficient permissions", 401);
}
$actions = $request->route()->getAction();
$roles = isset($actions['roles']) ? $actions['roles'] : null;
if ($request->user()->hasAnyRole($roles) || !$roles) {
return $next($request);
}
return response("Insufficient permissions", 401);
}
}
User.php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function roles()
{
return $this->belongsToMany('App\Role', 'user_role', 'user_id', 'role_id');
}
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
public function hasRole($role)
{
if ($this->roles()->where('name', $role)->first()) {
return true;
}
return false;
}
}
Kernel.php
namespace App\Http;
use App\Http\Middleware\CheckRole;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
...
...
...
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
...
...
'roles' => \App\Http\Middleware\CheckRole::class
];
}
如果你想做类似的事情,你能找到解决方案吗?我试图在我的路由文件中使用Auth::user(),然后需要一组管理路由或用户路由,但Auth::user()未设置,即使我登录有点晚,但我使用了Laratrust