当我删除实体时,cakephp警告该请求未应用授权检查。当我返回上一个动作时,实体已删除。通过绕过authorization中间件以某种方式发生。PS我正在使用作曲家的骨架应用程序。我尚未对删除操作应用授权。我希望删除失败,但是仍然存在。
CakePHP 4
控制器代码。
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
$product = $this->Products->get($id);
if ($this->Products->delete($product)) {
$this->Flash->success(__('The product has been deleted.'));
} else {
$this->Flash->error(__('The product could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
您的代码没有绕过授权,它根本不应用任何授权检查。
授权不会自动发生,除非您显式配置/设置自动发出检查的内容,例如request authorization middleware或model and action based authorization。如果您没有配置类似的内容,则必须在需要时单击issue authorization checks manually。
没有应用检查的消息主要是调试帮助,检查发生在中间件之后您的控制器代码已经运行(实际上不可能更早地检查它,因为您的代码可以自由地应用授权检查您代码中的几乎任何位置。
如果您明确地要求操作not需要授权,则可以通过调用组件的skipAuthorization()
方法来通知该组件:
$this->Authorization->skipAuthorization();
另请参见