在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?

Posted

技术标签:

【中文标题】在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?【英文标题】:In Laravel, how do you use a "cannot" in a Route::middleware group? 【发布时间】: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 中间件,但我建议只创建另一个门来检查用户是否是“标准”用户(或者最好描述他们)。 【参考方案1】:

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

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

【讨论】:

以上是关于在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 如何在会话 Laravel 中存储额外的数据/值

Laravel:如何在 Laravel 中找到公用文件夹?

如何在laravel中删除公共文件夹

如何在 laravel 中解码 Json 对象并在 laravel 中应用 foreach 循环

如何在 Laravel 外部的包中使用 Laravel 外观(缓存、日志、存储)

Laravel - 如何在本地开发中使用 https 服务 laravel 项目