比方說,我有User
模型和Post
模型。 Post
模型包含字段user_id
。 User
有$hasMany
on Post
and Post
has $belongsTo
on User
。如何防止用戶編輯其他人的帖子
我有一些文章編輯動作:
PostsController::edit($id) {
if($this->request->isPost())
{
$this->Post->id = $id;
$this->Post->save();
}
$post = $this->Post->read($id);
$this->set(compact('post'));
}
我用AuthComponent
登錄的用戶。
我該如何防止用戶編輯別人的帖子?功能/選項中是否有任何蛋糕構建?因爲some1可以使用任何ID登錄併發布編輯操作。它甚至沒有保存發佈數據的情況 - 假設發佈是私人的(只有所有者應該看到它) - 當有人打電話發佈/編輯/ some_id時,它會看到這篇文章的編輯窗體...
更容易的方法是隻在編輯行動開始補充一點:
$this->Post->id = $id;
if($this->Post->readField('user_id') != $this->Auth->user('id'))
{ //trigger error or redirect }
但我將不得不在這個更新/讀取屬於某個用戶的任何數據的每個動作的開頭添加這一點。所以我正在尋找更優雅的方式來做到這一點。
其實,有避免添加一行的一種方式,這或許可以通過編輯操作在一個地方比較用戶ID來解決,比如'的AppController :: isAuthorized()'或'beforeFilter()'。 –