私は自分のサイトのいくつかのページへのユーザーのアクセスの管理に取り組んでいます。私には1種類の完全に認証されたユーザー(role: ROLE_MEMBER
に基づくROLE_USER
)があり、もちろん匿名ユーザーもいます。
サイトに2ページ(/index
、 )があり、両方とも。requireとrequires (for )としましょう。/account
secure: true
/index
role: IS_AUTHENTICATED_ANONYMOUSLY
/account
role: IS_AUTHENTICATED_FULLY
ROLE_MEMBER
ログインしたメンバー専用の「アカウントメニュー」を両方のページに表示したいので、テンプレートでチェックしis_granted('ROLE_MEMBER')
ます。
/account
もちろん、これはうまく機能します。メンバーが/index
(「匿名」ページである)に移動すると、関数はをis_granted('ROLE_MEMBER')
返し0
、をis_granted('IS_AUTHENTICATED_ANONYMOUSLY')
返します1
。メンバーが再びに移動する/account
と、パスワードを再入力しなくてもすべてが機能します(つまり、メンバーはまだログアウトしていません)。
/index
それで、問題は、ページのテンプレート内のユーザーにログインしているメンバーをどのように検出するかです。
更新しました。@alessandro1997ここに私のapp/config/security.yml
設定があります
security:
encoders:
AG\MemberBundle\Entity\Member:
id: member_saltedpassword_encoder
role_hierarchy:
ROLE_MEMBER: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_MEMBER, ROLE_ALLOWED_TO_SWITCH]
providers:
member_db:
entity: { class: AGMemberBundle:Member, property: email }
firewalls:
members:
pattern: ^/account
security: true
form_login:
login_path: /account/login
check_path: /account/login/check
post_only: true
username_parameter: _email
password_parameter: _password
default_target_path: /account/
always_use_default_target_path: true
# csrf token options
csrf_parameter: _csrf_token
intention: authenticate
provider: member_db
logout:
path: /account/logout
target: /
remember_me:
key: "qwewqeqwerwxeweqweqwe"
lifetime: 3600
path: /
domain: ~ # Defaults to the current domain from $_SERVER
pages:
pattern: ^/
security: true
anonymous: ~
access_control:
- { path: ^/account, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }