2012-06-22 5 views
1

User 모델과 Post 모델이 있다고 가정 해 봅니다. Post 모델에 user_id 필드가 포함되어 있습니다. User은 이 Post이고 Post$belongsToUser입니다.사용자가 다른 사람의 게시물을 편집하지 못하게하는 방법

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 다른 게시물을 수정하지 못하게하려면 어떻게해야합니까? 어떤 cake가 함수/옵션에 빌드되어 있나요? 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은 최고의 아름다움을 선사합니다. 그러나 조심스럽게 학습 곡선을 얻었습니다. 쉽게 포기하지 마라.

당신은 거기에 줄을 추가 피하는 방법입니다,이 아마 같은 AppController가`로, 한 곳에서 편집 작업을위한 사용자 ID를 비교함으로써 해결 될 수 http://book.cakephp.org/1.3/view/1543/Simple-Acl-controlled-Application

+0

실제로 책에서 ACL을 볼 수 :: isAuthorized()'또는'beforeFilter()'를 호출합니다. –

3

음 정확한 예 (솜씨 역시 포스트/사용자 모델을 사용하여) cake manual

모든 사람의 승자로 볼 수 있습니다!

관련 문제