授权不适用于DELETE操作

时间:2020-04-13 23:14:02

标签: cakephp authorization middleware

当我删除实体时,cakephp警告该请求未应用授权检查。当我返回上一个动作时,实体已删除。通过绕过授权中间件,它会以某种方式发生。 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']);


}

1 个答案:

答案 0 :(得分:1)

您的代码不会绕过授权,只是不会应用任何授权检查。

授权不会自动发生,除非您明确配置/设置一些自动发出检查的内容,例如request authorization middlewaremodel and action based authorization。如果没有配置类似的内容,则必须在需要的地方issue authorization checks manually

未应用检查的消息主要是调试帮助,检查发生在中间代码之后(您的控制器代码已经运行)(实际上不可能更早地检查它,因为您的代码是可以在代码中的几乎任何时候自由地应用授权检查)。

如果您明确希望某个操作需要授权,则可以通过调用其skipAuthorization()方法来通知该组件:

$this->Authorization->skipAuthorization();

另请参见