Laravel 8 项目中的角色关联问题

问题描述 投票:0回答:1

我在 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'));
    }
}

基本上我的尝试并没有产生预期的结果。

php laravel-8
1个回答
0
投票

嗨,我是来自印度的govardhan

如果我不确定你想练习处理 Laravel 更新版本的方式,那么 Laravel 8 中定义路由的方式略有变化

使用我提供的以下代码

  • 现在您可以在组函数中使用中间件 apply 方法了

使用App\Http\Middleware\CheckRole;

Route::middleware(['auth', CheckRole::class])->prefix('customers')->group(function () { 路线::get('/', 'CustomerController@getList')->middleware('角色:客户,admin'); 路线::get('/add', 'CustomerController@getAdd')->middleware('角色:客户,admin'); });

© www.soinside.com 2019 - 2024. All rights reserved.