Laravel - Gates Multiple或中间件

问题描述 投票:0回答:1

我在我的web.php中使用了laravel gate,我在其中添加了中间件,如下所示

Route::post('/sellproducts', 'ProductController@Sell')->middleware('auth')->middleware('can:admin');

我想添加另一个规则,例如can:admin或can:moderator,因此其中任何一个都是true,gate将允许

有任何想法吗 ?

laravel
1个回答
1
投票

在为路由启用中间件时,我认为您不能使用逻辑或运算符。

您可以创建第三个Gate,当用户是admin或moderator时返回true。

另一种选择是你会创建一个ProductPolicy。在此策略中,您可以创建一个sellProduct()方法来检查用户是否具有正确的角色:

public function sellProduct(User $user, Product $product) 
{
    // Return true when user is moderator or admin
}

您必须在ProductController@Sell中调用此方法:

$this->authorize('sellProduct', $product);

请注意,门和策略旨在确定用户是否有权执行操作。这可以通过检查用户是否具有某个角色,或者用户是否是产品的所有者来完成。当你将门定义为'admin'时,事情可能会混淆。

© www.soinside.com 2019 - 2024. All rights reserved.