我遇到了这个问题。
使用FosUserBundle和FacebookBundle配置了我的Sf2 env。
我设法到了前端的一些ADMIN only部分(意思是主持人的事情)。 默认情况下,在我的项目中创建的每个用户都只有ROLE_USER。
“主持人”事情只能通过拥有ROLE_ADMIN来访问。问题是,即使我按“$user->addRole('ROLE_ADMIN')
添加角色,检查用户是否有此角色失败。
如果用户有这种角色,我想展示一些东西,但我不能。
都不是“{% if is_granted('ROLE_ADMIN') %}
”,
并且“$this->container->get('security.context')->isGranted('ROLE_ADMIN')
”也没有成功。
每次我在TWIG上遇到FALSE或什么都没有。
检查用户是否有ROLE_USER。
只是为了确保我正在添加配置文件。
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
chain_provider:
chain:
providers: [fos_userbundle, my_fos_facebook_provider]
fos_userbundle:
id: user_provider
my_fos_facebook_provider:
id: my.facebook.user
firewalls:
public:
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
use_referer: true
fos_facebook:
app_url: "http://www.facebook.com/apps/application.php?id={{APPID}}"
server_url: "http://l.local/app_dev.php/"
login_path: /login
check_path: /login_fb_check
default_target_path: /
provider: my_fos_facebook_provider
use_referer: true
logout:
path: /logout
invalidate_session: false
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/secured/.*, role: IS_AUTHENTICATED_FULLY }
- { path: ^/facebook/, role: [ROLE_FACEBOOK] }
- { path: ^/dodaj$, role: ROLE_USER }
- { path: ^/.*, role: [IS_AUTHENTICATED_ANONYMOUSLY] }
请,如果有人可以帮忙,因为我不知道该怎么做。
我总是在检查以确定我的角色(“ROLE_ADMIN”)是否已添加到我的数据库中,事实上,它是。
答案 0 :(得分:1)
角色是会话生成过程(连接,登录..)。所以你从安全上下文(会话)中得到它。直接在twig模板中或从其他地方的securityContext对象:
在树枝模板中使用is_granted('ROLE_ADMIN')
在控制器(带安全上下文)中,使用$securityContext->isGranted('ROLE_ADMIN')
角色转换后不要忘记重新签名。