我想避免某些用户可以更改网址的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
答案 0 :(得分:0)
如果get操作没有找到任何结果a 将引发Cake \ Datasource \ Exception \ RecordNotFoundException。您 可以自己捕获此异常,或允许CakePHP转换 它变成404错误。
或者,您可以使用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