2014-11-12 2 views
1

내 security.yml에 사용자 정의 역할을 설정하려고합니다. 따라서 로그인 후에 사용자가 기본 페이지에 액세스 할 수 있거나 액세스 할 수 없습니다 (ActiveDirectory를 사용함). ROLE_GUESTsymfony2 - 사용자 정의 롤

여기 내 security.yml 파일입니다 :

내가 원하는 건 하나 개의 역할을 만드는 것입니다

    :

    role_hierarchy: 
        ROLE_GUEST:  ROLE_GUEST 
        ROLE_USER:  [ROLE_GUEST, ROLE_USER] 
        ROLE_ADMIN:  [ROLE_GUEST, ROLE_USER, ROLE_ADMIN] 
        ROLE_SUPER_ADMIN: [ROLE_GUEST, ROLE_USER, ROLE_ADMIN, ROLE_SUPER_ADMIN] 
    

    내가 잘 이해하면, 이것은 내가 그 역할을 읽는 방법입니다

  • 'ROLE_GUEST'역할이있는 사용자는 'ROLE_GUEST'가 필요한 페이지 만 볼 수 있습니다.
  • 'ROLE_USER'역할을 가진 사용자는 모든 PA를 볼 수 있습니다 'ROLE_GUEST'
  • 필요 GE의 '역할'ROLE_ADMIN '을 가진 사용자는'ROLE_GUEST '등을 요구하는 페이지를 볼 수 있습니다'ROLE_USER ' "
  • 등 ...

그럼, 다음으로 access_control을 설정

access_control: 
    - { path: ^/$, role: ROLE_USER } 

은 내가이 access_control에서 원하는 것은 단지 ROLE_USER에 메인 페이지의 액세스를 제한하는 것입니다. 사용자가 처음 로그인 할 때 이미 기본 역할을 ROLE_GUEST로 설정했습니다. 그러나 위와 같이 ROLE_USER를 넣더라도 ROLE_GUEST가있는 사용자로 기본 페이지에 액세스 할 수 있습니다.

내가 어떻게이 아이디어를 얻을 수 있는지 생각해보십시오.

감사합니다.

답변

1

나는 알았다.

FOS 사용자 번들은 사용자 엔티티에서 말하지 않더라도 (프로필러에서 확인할 수 있음) 분명히 모든 사용자에게 ROLE "USER"를 자동으로 추가합니다.

그래서 사용자 정의 ROLE을 원한다면, ROLE_USER은 항상 모든 사람들이 가질 수있는 하위 역할 일 것입니다.

내가 틀렸다면 나를 교정하십시오!

아도 나는 (누군가를 도울 수 있다면) 내 방화벽 및 access_control를 수정했습니다

역할 계층 구조 설정 :

role_hierarchy: 
     ROLE_CUSTOM:  [ROLE_USER] 
     ROLE_ADMIN:  [ROLE_CUSTOM] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN] 

방화벽 설정 :

firewalls: 
     main: 
      pattern: ^/ 

액세스 제어 설정을 :

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, role: ROLE_ADMIN } 
    - { path: ^/, role: ROLE_CUSTOM } // IMPORTANT TO BE THE LAST ONE 
1

정규 표현식이 문제가있는 것 같습니다. ^/$/과 일치하며 다른 것은 없습니다. 이것은 내가 추측 무슨 뜻입니다 :

access_control: 
    - { path: ^/.*, role: ROLE_USER } 

또한 역할 계층 구조를 단순화 할 수 있습니다

워드 프로세서에서
role_hierarchy: 
    ROLE_USER:  [ROLE_GUEST] # ROLE_USER implies ROLE_GUEST 
    ROLE_ADMIN:  [ROLE_USER] # ROLE_ADMIN implies ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_ADMIN] # and so on ... 

이 페이지는 보안 유권자 뒤에 개념을 이해하는 것이 매우 helpfull이다 http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

symfony 2.6에서는 맞춤 유권자를 작성하는 것이 간단 해졌습니다 : http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters

그리고 비디오가 있습니다. intr knpuniversities의 oduction youtube 채널 : https://www.youtube.com/watch?v=fF8tpdlnyaE

+0

답변 주셔서 감사합니다,하지만 이것은 내가 원하는 것이 아닙니다. 앞에서 말했듯이 ActiveDirectory를 사용하므로 모든 사용자가 로그인 할 수 있습니다. 하지만 모든 사용자가 동일한 액세스 권한을 갖기를 원하지 않습니다. 그 이유는 사용자가 사이트 및 ADMIN에 액세스하여 사이트 + ADMIN 부분에 액세스하기를 원하기 때문입니다. – Anthony

+0

죄송합니다, 나는 활성 디렉토리 주석을 완전히 무시했습니다 ... : P하지만 어쨌든 access_controll 부분의 정규 표현식이 문제 일 수 있습니다. 그에 따라 내 대답을 업데이 트되었습니다. –

+0

Nope ... 나는이 REGEX 문제를 이미 한 번 가지고 있으며 작동하는 유일한 것은'^/$'입니다. 너의 것,'^ /. *'는 방향 전환 오류를 일으킨다. 또한 사용자 ROLE_USER로 설정하고 기본 페이지를 ADMIN으로 만 제한하면 작동합니다. 403 - 금지 된 오류가 표시됩니다. 그래서 나는 그것이 다른 어떤 것 (나는 희망한다)이 더 커스텀 역할의 문제라고 생각한다. – Anthony