【问题标题】:Laravel 5.8 Multiple middlewares using guards and specific options for each guardLaravel 5.8 多个中间件使用守卫和每个守卫的特定选项
【发布时间】:2020-06-18 04:34:38
【问题描述】:

我有一个 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


【解决方案1】:

你有两个选择

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2018-03-11
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多