上下文: 我目前正在一個網站上,某些功能只可用於經過身份驗證的成員。所以,我有以下防火牆配置:併發防火牆
/app/config/security.yml:
security:
encoders:
members:
class: VE\ProjectBundle\Model\Member
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
members:
propel:
class: VE\ProjectBundle\Model\Member
property: email
firewalls:
member_area:
pattern: ^/
provider: members
anonymous: ~
form_login:
login_path: /member
check_path: /member/validate-login
username_parameter: email
password_parameter: password
default_target_path: /member
logout:
path: /member/logout
target: /member
invalidate_session: false
我也有到URL「/管理」和訪問行政管理區域以下配置:
/app/config/security.yml:
security:
encoders:
administrators:
class: VE\AdministrationBundle\Model\Administrator
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
administrators:
propel:
class: VE\AdministrationBundle\Model\Administrator
property: email
firewalls:
administration_area:
pattern: ^/administration
provider: administrators
anonymous: ~
form_login:
login_path: /administration/administrator/login
check_path: /administration/administrator/validate-login
username_parameter: email
password_parameter: password
default_target_path: /administration
csrf_parameter: _token
logout:
path: /administration/administrator/logout
target: /administration
invalidate_session: false
access_control:
administration_administrator_login:
path: ^/administration/administrator/login
roles: IS_AUTHENTICATED_ANONYMOUSLY
administration:
path: ^/administration
roles: ROLE_ADMIN
問題: 我想在網站的全局模板顯示(防火牆後面的「米ember_area「)訪問者通過防火牆」administration_area「進行身份驗證時返回管理的鏈接。事實上,我嘗試做更復雜的事情,但我簡化了問題,使其更加清晰。
/src/VE/ProjectBundle/Resources/views/globalTemplate.html.twig:
{% if app.user and is_granted('ROLE_ADMIN') %}
<a href="#">Return to administration</a>
{% endif %}
除了防火牆的模式是 「/施用」,或防火牆 「administration_area」 不活躍例如,爲「/ home」的網址。另外,如果定義了「app.user」,它將包含對象「成員」而不是對象「管理員」。
將防火牆「administration_area」的模式更改爲「^ /」並不能解決任何問題,因爲之前執行了防火牆「member_area」。
更改配置中防火牆的順序提出了相反的問題。如果定義了「app.user」,它將包含一個對象「管理員」而不是一個對象「成員」。
在兩個防火牆之間共享相同的上下文似乎不是解決方案,因爲我們沒有單個對象「用戶」。我希望絕對有兩個獨立的實體(會員和管理員)。
該解決方案似乎是Symfony的一種演進,以允許在相同模式下配置併發防火牆。看到我的帖子:https://github.com/symfony/symfony/issues/16378
你有什麼想法來解決我的問題嗎?
謝謝!
爲什麼你需要兩個獨立的實體?我會使用相同的防火牆並檢查「ROLE_ADMIN」。 – windm
我的兩個實體位於不同的包中,並具有與身份驗證(電子郵件,密碼和鹽)相關的屬性。我想保持這種分離。 –