Laravel 5.8 使用守卫的多个中间件和每个守卫的特定选项

Laravel 5.8 Multiple middlewares using guards and specific options for each guard

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

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

但它对客户端有效,对管理员无效

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

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

你有两个选择

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