【问题标题】:In Laravel, how do you use a "cannot" in a Route::middleware group?在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?
【发布时间】:2021-07-08 17:44:22
【问题描述】:

我有自己的 Laravel 门定义“isAdmin”和“isManager”。 “auth”中间件仅表示用户已登录。我的路线看起来像这样(非常简化):

Route::middleware(['auth', 'can:isAdmin'])->group(
    function () {
        Route::get('/', function() { return response("Admin home"); });
    }
);

Route::middleware(['auth', 'can:isManager'])->group(
    function () {
        Route::get('/', function() { return response("Manager home"); });
    }
);

但是对于既不是管理员也不是经理的登录用户的路由我该怎么办?我想这样做:

Route::middleware(['auth', 'cannot:isManager', 'cannot:isAdmin'])->group(
    function () {
        Route::get('/', function() { return response("Who are you, anyway?"); });
    }
);

有人有什么想法吗?谢谢。

【问题讨论】:

  • 您是否希望该路由仅可供非管理员或管理人员的用户访问,或者管理员和经理也可以查看该页面?
  • 不,管理员和经理不应该看到它。
  • 我很确定没有 cannnot 中间件。您可以创建一个 cannot 中间件,但我建议只创建另一个门来检查用户是否是“标准”用户(或者最好描述他们)。

标签: laravel laravel-routing laravel-middleware laravel-gate


【解决方案1】:

您可以在启动方法的 app/Providers/AuthServiceProvider.php 中将新规则(门)设置为 notAdminAndManager 这是一个例子

Gate::define('isNotAdminAndManager', function (User $user) {
    return (! in_array($);
});

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2021-01-03
    • 2016-02-18
    • 2016-04-07
    • 2017-03-29
    • 2020-08-08
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多