在 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 中解码 Json 对象并在 laravel 中应用 foreach 循环