2009-11-02 5 views
1

많은 수의 관리자 생성기가있는 웹 사이트에서 다양한 테이블을 관리합니다. 인증 된 사용자 영역 내에서 개인 작업이나 필드뿐 아니라 전체 관리 모듈에 대한 액세스를 거부 할 수 있기를 원합니다.인증 정보에 따라 심포니 관리자 생성기 페이지 전체 제한하기

generator.yml에 대한 글로벌 자격 증명 매개 변수가 보이지 않으며 모듈 수준의 security.yml에 물건을 넣어도 아무 효과가없는 것으로 보입니다.

나는 생성 된 코드를 찾아보고 cache/front/dev/modules/autoFoo/actions/actions.class.php을보고 특히 preExecute()에서 어떻게해야할지 모르겠다.

내 자신의 actions.class.php 파일에서 preExecute()를 덮어 써야한다고 가정하지만, 부모가 될 필요가있는 부분에 대해서는 약간 확신 할 수 없습니다 (예 : parent :: preExecute() if (if 사실 내가 필요하거나 그렇지 않다).

답변

1

일부 예비 조사의 결과와 함께, 내 자신의 질문에 대답, 그를 나타납니다 :

class fooActions extends autoFooActions 
{ 
    public function preExecute() { 
    if (!sfContext::getInstance()->getUser()->hasCredential('can_do_foo')) { 
     $this->redirect('@homepage'); 
    } 
    parent::preExecute(); 
    } 
} 

는 ... 적어도 관리자 기능에서 얻을 URL을 해킹 사람들을 방지 할 수 있습니다. 그러나 저는 그게 sfContext::getInstance() is evil라고 믿게되었습니다. 그러므로 나는 아직도 올바른 방법을 찾고있다.

+1

을 그 악이 아니다 in action/controllers :] 실제로 컨텍스트 또는 세션에 대한 액세스가 필요합니다. 당신은 어쨌든 $ this-> getContext()를 사용할 수있다. – gpilotino

2

"all"값을 설정하여 모듈 수준 security.yml의 자격 증명을 설정할 수 있다고 생각합니다. 즉, < 모듈 > /config/security.yml의 내부입니다 넣어 :

all: 
    credentials: ModuleAccess 
+0

그게 내가 생각했던 것인데, 나는 최상위 키로 'default'를 시도했다. 어떤 경우에도 작동하지 않습니다. – dland

+0

난 그냥 두 번 확인,이 나를 위해 sf 1.2 작동합니다. –

1

당신의 security.yml 파일을 모델/config 폴더에 다음과 같아야합니다

default: 
    is_secure: on 
    credentials: [ moduel_access ]