【发布时间】:2021-06-07 01:46:43
【问题描述】:
我有一个资源控制器,想为 destroyMany 添加一个额外的自定义策略方法 在删除许多之前,我会在其中检查用户是否是管理员。
默认方法可以正常工作
| Controller Method | Policy Method |
|---|---|
| index | viewAny |
| show | view |
| create | create |
| store | create |
| edit | update |
| update | update |
| destroy | delete |
| destroyMany | destroyMany |
控制器destroyMany方法被调用,策略不是 还是我应该坚持使用盖茨这种额外的方法? 文档说我可以为方法和策略起任何名称,如何将两者联系起来?
destroyMany->destroyMany 或 destroyMany->deleteMany 将是一个不错的设置。
并且将是我的资源控制器(它应该驻留的位置)的一个很好的补充
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
}
}
【问题讨论】:
-
你使用的是什么版本的 Laravel?请你也显示你的控制器代码。
-
我已经编辑了我的问题,这是一个带有策略的普通资源控制器。 Laravel 8
标签: laravel controller resources policies