Php 如何在Laravel策略文件中将多个用户ID传递给控制器

Php 如何在Laravel策略文件中将多个用户ID传递给控制器,php,laravel,Php,Laravel,在我的产品策略文件中,我有以下内容: public function change_customer_pricing(User $user) { return $user->id == 2; } 如何将多个用户ID返回到控制器 我的控制器: public function change_customer_pricing($ProdID) { $user = Auth::user(); //dd($user->can('change_

在我的
产品
策略
文件中,我有以下内容:

public function change_customer_pricing(User $user) {
    return $user->id == 2;
}
如何将多个
用户ID
返回到
控制器

我的控制器:

public function change_customer_pricing($ProdID) {
    $user = Auth::user();
            
    //dd($user->can('change_customer_pricing', Product::class));
        
    if (!$user->can('change_customer_pricing', Product::class)) 
    return redirect()->route('home')->with('status', 'You are not Authorized to access')->with('code', 'red');
...

如果要确定
用户
是否有权对
产品
执行操作,则需要在
用户
产品
之间建立关系,然后检查关系

假设您的
产品
上有一个
user\u id
字段,该字段保存创建该
产品
用户的
id
,例如,只有该
用户
才允许更新或删除该
产品
。您需要检查已验证的
用户的
id
是否与
产品的
用户id
匹配

public function change_customer_pricin(User $user, Product $product)
{
    return $user->id === $product->user_id;
}
然后,您可以在Laravel中使用任何内置授权功能。当您想检查
用户是否从控制器获得授权时,您可以执行以下操作:

public function change_customer_pricing($ProdID)
{
    $product = Product::find($ProdId);

    $this->authorize('change_product_pricing', $product);
}

作为一个旁注,您可能需要考虑在控制器中使用。

更新

由于您的
产品
用户
没有关系,并且您希望授权多个
用户
,因此您可以对照数组检查当前已验证的
用户
id

public function change_customer_pricin(User $user)
{
    return in_array($user->id, [1, 2, 3, 4];
}
这是最快、最简单的解决方案。然而,它不是很容易维护,因为随着需求的变化,您必须添加/删除它

更好的解决方案是使用角色和权限来确定授权。定义用于范围访问的权限,然后可以将权限直接关联(分配)到
用户
角色
(以及
角色
用户
)。执行操作时,检查
用户
是否具有所需的
角色
权限


有几个软件包可以提供这样的功能,一个非常流行的选择是,另一个流行的选择是。

你没有。策略通常返回truthy或
boolean
响应。您想做什么?是否希望策略允许id=2的用户之外的其他用户?感谢您的响应,产品上没有userid字段。我只是想阻止某些userid用户能够访问控制器中的某些操作,如change\u customer\u pricing函数。@user2197774我已根据您的评论对我的答案添加了一个更新。
public function change_customer_pricing(User $user){
    
    return in_array($user->UserID,[2,12,14]);
}