У меня есть контроллер ресурсов, и я хочу добавить дополнительный настраиваемый метод политики для 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
}
}