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]);
}