我在 Laravel 8 上遇到语法问题。
在以前的版本中,我能够在路线上关联一组角色来定义用户是否有权访问特定路线。基本上这是我在以前的版本中使用的。
Route::group(['prefix'=>'customers', 'middleware' => ['auth', 'roles']], function () {
Route::get('/', ['uses' => 'CustomerController@getList', 'roles' => ['customers','admin']]);
Route::get('/add', ['uses' => 'CustomerController@getAdd', 'roles' => ['customers','admin']]);
});
现在在 Laravel 8 上,控制器和函数的声明完全不同了。
Route::prefix('customers')->group(function () {
Route::get('/employ', [App\Http\Controllers\CustomerController::class, 'getList']);
Route::get('/employ', [App\Http\Controllers\CustomerController::class, 'getAdd']);
});
我很难在新版本上使用旧版本的相同方法。
这里有人遇到了同样的问题,并且有一些提示可以帮助我解决这个问题?
下面是我用来检查身份验证用户是否有权执行某些操作的中间件。
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Response;
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 new Response(view('errors.401'));
}
$actions = $request->route()->getAction();
$roles = isset($actions['roles']) ? $actions['roles'] : null;
if ( $request->user()->hasAnyRole($roles) || !$roles ) {
return $next($request);
}
return new Response(view('errors.401'));
}
}
基本上我的尝试并没有产生预期的结果。
嗨,我是来自印度的govardhan
如果我不确定你想练习处理 Laravel 更新版本的方式,那么 Laravel 8 中定义路由的方式略有变化
使用我提供的以下代码
使用App\Http\Middleware\CheckRole;
Route::middleware(['auth', CheckRole::class])->prefix('customers')->group(function () { 路线::get('/', 'CustomerController@getList')->middleware('角色:客户,admin'); 路线::get('/add', 'CustomerController@getAdd')->middleware('角色:客户,admin'); });