Laravel 5.8使用防护的多个中间件以及每个防护的特定选项

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

我有一个laravel应用程序,允许管理员和客户都可以访问它,并且他们每个人都将具有2个单独的表,用于每种类型的用户进行身份验证和2个不同的防护措施,具有特定的权限。我现在需要的是让客户访问控制器内的特定方法,而管理员可以访问所有方法。

class OrdersController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth:client'])->only(['index', 'create', 'store', 'edit', 'printOrder']);
        $this->middleware('auth:admin');
    }

但是对客户端来说很好用,对管理员不起作用

laravel laravel-5 laravel-middleware laravel-authentication laravel-guard
2个回答
1
投票

您有两个选择

  1. 在相应的路径上定义所需的中间件
Route::get('/some-route', [
    'uses' => 'OrdersController@create',
    'as' => 'create-order',
])->middleware('auth:client');
  1. 检查方法内部,是否进行了正确的身份验证auth('auth:client')->check()

0
投票

当访问基于角色(而不是权限)时,我建议分离控制器,否则(例如,如果访问基于权限),那么中间件也应基于权限(例如)

$this->middleware('can:update order')->only(['update','edit']);
$this->middleware('can:store order')->only(['store','create']);

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