2012-07-10 4 views
0

모든 사용자가 로그인해야하는 애플리케이션이 있습니다. 인증을 위해 Auth 구성 요소를 사용하고 인증을 위해 ACL을 사용하고 있습니다.로그인하지 않은 경우 cakePHP ACL

나는 기본적으로`으로, beforeFilter() 관리자의 컨트롤러에서 이런 일을하고 있어요

:

if(!$this->Acl->check(array('model' => 'User', 'foreign_key' => $this->Auth->user()['id']), 'Admin', 'read')) 
{ 
    pr('You are NOT allowed to be here!'); 
} 

이 로그인 한 사용자 모든 잘 작동, 일부 사용자는 관리자 페이지를 볼 수 있습니다, 일부는 할 수 없습니다 . 내가 /관리자에 갈 때 로그인하지 않은 경우에는

는, 내가 얻을 :

AclNode :: 노드() - 나오지 않았어 '을 t " 배열 ([Aro0로 식별 아로 노드를 찾을 수 있습니다. 모델] = > 모델 [Aro0.foreign_key] = > U) "

(는 'U'를 인쇄 이유를 모르겠다). 그것은 조회를하려고하는 것 같지만 사용자 정보가 없기 때문에 충돌합니다. 나는 여기서 뭔가를 놓치고 있다고 확신한다. 사용자가 로그인하면 내가 확인하여 문제를 방지 할 수 있습니다 :

if($this->Auth->user()) //do the ACL check 

하지만 그 접근 방식 좋아하지 않아, 나는 그것이 잘못된 것 같아요.

기본 설정이 필요합니까?

답변

0

이 오류는 데이터베이스에 acos 노드가 없다는 것을 의미합니다. 관계의 foreign_key도 잘못되었습니다! 어쩌면 당신은 Cake Book - Simple Acl controlled Application을 확인해야합니다. 그리고 나중에 당신이 이해하지 못하는 것에 대한 자세한 내용을 알려 드리겠습니다.

beforeFilter()에는 Guest 만 허용해야하며 나머지 권한은 DB에 있어야합니다.

+0

답변 해 주셔서 감사합니다. 나는 ACL에 익숙하지 않은데 문서가 지저분합니다. 내가 로그인 한 사용자 일 때 나는 작동하지 않기 때문에 왜 나는 acos가 없는지 이해하지 못합니다. 또한 foreign_key가 잘못된 이유는 무엇입니까? 그것은 로그인 한 사용자를 가리 킵니다. – joakimdahlstrom

관련 문제