gpt4 book ai didi

Laravel,具有自定义策略方法的自定义 Controller 方法?

转载 作者:行者123 更新时间:2023-12-04 07:59:27 25 4
gpt4 key购买 nike

我有一个资源 Controller ,想为 destroyMany 添加一个额外的自定义策略方法
在删除许多用户之前,我会检查用户是否是管理员。
默认方法工作正常


Controller 方法
政策方法


指数
查看任何

展示
看法

创建
创建

店铺
创建

编辑
更新

更新
更新

破坏
删除

摧毁许多
摧毁许多


Controller destroyMany 方法被调用,策略不是
还是我应该坚持使用盖茨这种额外的方法?
文档说我可以为方法和策略取任何名称,如何将两者联系起来?
destroyMany->destroyMany 或
destroyMany->deleteMany 将是一个很好的设置。
并且将是我的资源 Controller (它应该驻留的地方)的一个很好的补充

class ResourceController extends Controller
{
public function __construct()
{
$this->middleware('auth:api');
$this->authorizeResource(Resource::class, 'resource');
}

public function index()
{

return ResourceCollection::collection(Resource::all());
}

public function destroyMany(Request $request)
{
// gets called but needs a policy which isn't called
}
}
政策
class ResourcePolicy
{
use HandlesAuthorization;

/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}

public function viewAny(User $user)
{
// works
return $user->hasAnyRoles(['admin', 'superAdmin']);
}

public function delete(User $user, Resource $resource)
{
// works
return $user->hasAnyRoles(['admin', 'superAdmin']);
}

public function deleteMany(User $user, Resource $resource)
{
// not called because the controller method needs to be hooked up, like the other methods

}
}

最佳答案

要使添加策略方法起作用,您需要更新 resourceAbilityMap对于 Controller 。将以下内容添加到您的 Controller 应该可以解决问题:

protected function resourceAbilityMap()
{
return array_merge(parent::resourceAbilityMap(), [
'destroyMany' => 'deleteMany'
]);
}
另外,如果您没有从您的 deleteMany 返回任何内容策略方法,它将导致 403。
如果你的路由/ Controller 方法没有收到模型的实例,那么你还需要更新从 resourceMethodsWithoutModels 返回的数组方法:
protected function resourceMethodsWithoutModels()
{
return array_merge(parent::resourceMethodsWithoutModels(), ['destroyMany']);
}

关于Laravel,具有自定义策略方法的自定义 Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66542352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com