【发布时间】:2014-06-05 12:41:47
【问题描述】:
我遇到了这个问题。
已经用 FosUserBundle 和 FacebookBundle 配置了我的 Sf2 环境。
我已经设法在前端的一些仅限管理员的部分(意思是主持人的事情)。 默认情况下,在我的项目中创建的每个用户都只有 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”)是否已添加到我的数据库中,事实上,确实如此。
【问题讨论】:
-
1.您是否坚持(
$userManager->updateUser($user)用户对象?2. 您是否在与$user->addRole()相同的请求中或在下一个请求中进行角色检查? -
嗯,我做到了。 (
$user->save()) 我在保存用户后检查了角色。这有点奇怪.. -
我不知道这是否是常见的事情,但即使我的数据库中的角色位置为 NULL,当我执行
$user->getRoles()时,我也会得到 ROLE_USER。我知道这可能是任何人的默认角色,但实际上问题在于 ROLE_ADMIN。 -
请务必重新登录以申请角色。我从来不明白我们需要那个。
-
好的,这是我真正还没有做过的事情。请让我正确理解,当我将某个角色应用于用户(我自己的角色)并在控制器或树枝中检查该角色时,我只是在检查字符串,对吗?没有必要做一些其他的配置吗?
标签: symfony fosuserbundle user-roles