我在我的web.php中使用了laravel gate,我在其中添加了中间件,如下所示
Route::post('/sellproducts', 'ProductController@Sell')->middleware('auth')->middleware('can:admin');
我想添加另一个规则,例如can:admin或can:moderator,因此其中任何一个都是true,gate将允许
有任何想法吗 ?
在为路由启用中间件时,我认为您不能使用逻辑或运算符。
您可以创建第三个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'
时,事情可能会混淆。