避免用户可以在Cakephp上更改url id

时间:2016-09-17 22:20:59

标签: php model-view-controller cakephp-3.0

我想避免某些用户可以更改网址的ID,他可以编辑另一本图书。 例如:这是原始网址:

https://www.myurl/books/edit/1

用户可以更改数字1:

https://www.myurl/books/edit/41

我希望用户只能可以在他的国家/地区编辑他的图书

这是我原来的编辑来自我的BooksController

public function edit($id = null)
{
    $country_id= $this->Auth->User()['country_id'];

    $book= $this->Books->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'book', 'put'])) {
        $book= $this->Books->patchEntity($book, $this->request->data);
        if ($this->Books->save($book)) {
            $this->Flash->success(__('Success.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('Error'));
        }
    }


    $this->set('_serialize', ['book']);
}

我试图改变这部分代码:

$country_id= $this->Auth->User()['country_id'];
$book= $this->Books->get($id, [
        'contain' => []
    ]);

为此:

$country_id= $this -> Auth -> User()['country_id'];
$book = $this->Books->get($id, [
        'contain' => ['City'],
        'conditions' => ['City.country_id' => $country_id]
    ]);

因此,只有用户才能显示来自同一国家/地区的图书。 但是我有一个错误:" 记录未在表格中找到"预订" "

如果我把原始编辑功能完美,但用户可以更改id。 如果我进行上述更改,则用户无法修改任何图书ID

1 个答案:

答案 0 :(得分:0)

  

如果get操作没有找到任何结果a   将引发Cake \ Datasource \ Exception \ RecordNotFoundException。您   可以自己捕获此异常,或允许CakePHP转换   它变成404错误。

检查D ocumentation Here

或者,您可以使用find()方法查看first()

的结果
$book = $this->Books->find([
        'contain' => ['City'],
        'conditions' => ['City.country_id' => $country_id,'Books.id'=>$id]
    ])->first();

http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#getting-the-first-result