我正在使用FOSUserBundle,现在我正在尝试角色和访问控制。
我尝试创建一个新角色,更改我的某个用户的角色,然后访问具有受限访问权限的页面。
security.yml:
security:
encoders:
FN\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_USER_CONFIRMED: ROLE_USER
ROLE_ADMIN: [ROLE_USER, ROLE_USER_CONFIRMED]
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_USER_CONFIRMED, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main_login:
pattern: ^/login$
anonymous: true
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
always_use_default_target_path: false
default_target_path: /client/home
target_path_parameter: _target_path
use_referer: false
logout:
path: fos_user_security_logout
target: /home
remember_me:
key: %secret%
access_control:
- { path: ^/client, roles: ROLE_USER_CONFIRMED }
- { path: ^/admin, roles: ROLE_ADMIN }
我使用$user->setRoles(array('ROLE_USER_CONFIRMED'));
在我的数据库中,用户的角色发生了很好的变化,但当我点击FOSUserBundle工具栏中的用户时,我的用户仍然在ROLE_USER中。当我进入页面时:“xxx / client / home”,我有一个ACCESS DENIED页面。
您是否了解为什么我的数据库中的角色发生了很大变化,但我无法打开该页面?
答案 0 :(得分:2)
您是否有用户注销然后重新登录?在登录时,角色会被拉出并保存为会话的一部分,因此如果您在用户登录计算机时应用了该角色,则用户在注销然后重新登录之前不会看到该计算机上反映的角色。 / p>