【问题标题】:Check User profile When change page Symfony2更改页面 Symfony2 时检查用户配置文件
【发布时间】:2026-01-05 16:50:01
【问题描述】:

我使用 FOSUserBundle 创建用户,当用户创建时我还创建一个配置文件

用户和个人资料

我希望每当用户更改页面时,实际检查用户正在导航是否已通过身份验证并且还具有个人资料

我现在在我的控制器中

$user = $this->getUser();
if (!is_object($user)) { //i have to add || null !== $user->getProfile()
    throw new AccessDeniedException('This user does not have access to this section.');
}

但我不会在所有控制器中重复此代码,并且我还会检查用户是否有个人资料,否则会重定向到主页

【问题讨论】:

    标签: symfony


    【解决方案1】:

    您可以使用 JMSSecurityExtraBundle 为每个操作添加注释:

     /**
     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")
     */
    

    或不使用捆绑包:

    if (false === $this->get('security.context')->isGranted('ROLE_ADMIN')) {
        throw new AccessDeniedException();
    }
    

    它更简单。也许还有另一种解决方案可以为您的所有控制器制作,但我不知道。

    【讨论】:

    • 也许最好的解决方案是创建一个服务...不错的捆绑包
    • 我试试这个注解@Secure(roles="ROLE_ADMIN"),但是ROLE_USER可以访问...
    • 您确定与只有 ROLE_USER 的用户连接吗?每次更改用户角色时不要忘记清除缓存和注销
    【解决方案2】:

    您可以使用请求监听器: http://symfony.com/doc/current/cookbook/service_container/event_listener.html#request-events-checking-types

    只需添加你的魔法并通过活动重定向到主页

    【讨论】:

      最近更新 更多