2012-06-22 55 views
1

比方說,我有User模型和Post模型。 Post模型包含字段user_idUser$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 } 

但我將不得不在這個更新/讀取屬於某個用戶的任何數據的每個動作的開頭添加這一點。所以我正在尋找更優雅的方式來做到這一點。

回答

1

那麼沒有辦法避免添加一行來檢查用戶是否有權執行操作。即使您使用ACL(訪問控制列表),這是Cake最強大的功能之一。

但是,正如你所說的優雅一般,ACL將是最好的美麗:)雖然小心,他們有一個陡峭的學習曲線。不要放棄容易,它很值得。

你應該看到的ACL從書http://book.cakephp.org/1.3/view/1543/Simple-Acl-controlled-Application

+0

其實,有避免添加一行的一種方式,這或許可以通過編輯操作在一個地方比較用戶ID來解決,比如'的AppController :: isAuthorized()'或'beforeFilter()'。 –

3

好一個確切的例子(得心應手使用郵政/用戶模型太)在cake manual

每個人的可用贏家!

相關問題