我是第一次使用FOSUser建立网站的用户管理,我在搞清楚搞砸的地方时遇到了一些麻烦。
该角色位于roles
列的数据库中,如下所示:
a:1:{i:0;s:10:"ROLE_ADMIN";}
当我从控制器执行var_dump($this->getUser())
时,我得到了这个:
(...)
["roles":protected]=> array(1) { [0]=> string(10) "ROLE_ADMIN" }
(...)
所以一切都很好。
当我从控制器尝试if ($this->get('security.context')->isGranted('ROLE_ADMIN'))
或从树枝模板尝试{% if is_granted('ROLE_ADMIN') %}
时,Symfony不会检测到该角色。分析器还告诉我,只有ROLE_USER
角色。
这是我的app/config/security.yml
文件:
security:
providers:
main:
id: fos_user.user_provider.username
encoders:
Site\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_MODERATOR: [ROLE_USER]
ROLE_ADMIN: [ROLE_MODERATOR]
firewalls:
main:
pattern: ^/
anonymous: true
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
logout:
path: fos_user_security_logout
target: /
remember_me:
key: %secret%
default:
anonymous: ~
答案 0 :(得分:1)
看起来你没有清除缓存。尝试清除环境缓存
php app/console cache:clear --env=prod #for prod env
或
php app/console cache:clear #for dev env
答案 1 :(得分:0)
帮助混淆路人:
如果你在http://symfony.com/doc/current/security/entity_provider.html#create-your-user-entity上遵循了Symfony安全教程,你可能已经实现了这样的方法:
public function getRoles()
{
return array('ROLE_USER');
}
如果您稍后切换到FOSUserBundle
,则可能忘记删除此方法。对我来说,这是(自制)问题,为什么我的用户'角色没有正确加载。
答案 2 :(得分:-1)
如果我没有混淆,那么你在security.yml
中已经排好了 role_hierarchy:
ROLE_MODERATOR: [ROLE_USER]
ROLE_ADMIN: [ROLE_MODERATOR]
描述了您在两个角色中都输入了值
ROLE_USER
所以你应该做以下几行
role_hierarchy:
ROLE_MODERATOR: [ROLE_USER]
ROLE_ADMIN: [ROLE_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_MODERATOR,ROLE_ADMIN]