【问题标题】:Symfony2 : Checking for old ROLE returns trueSymfony2:检查旧角色返回 true
【发布时间】:2014-09-26 21:31:51
【问题描述】:

我将FOSUserBundle 用于我的 项目。注册后,我会使用下面的函数检查用户是否具有 FOSUB 提供的默认角色 ROLE_USER

 /**
  * Returns true if user has ROLE_USER
  *
  * @return boolean 
  */
 public function hasDefaultRole() {
     return ($this->hasRole('ROLE_USER'));
 }

如果此函数返回 true,我会设置一个新的帐户注册表单并在提交时更改角色并删除 ROLE_USER

编辑

$user = $this->container->get('security.context')->getToken()->getUser();
...
$userManager = $this->container->get('fos_user.user_manager');
$user->removeRole("ROLE_USER");
$user->setRoles(array("ROLE_TEACHER", "ROLE_TEACHER_BASIC"));
$user->setStatus(1);
$userManager->updateUser($user);
$this->resetToken($user);

resetToken 这样做:

 $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
 $this->container->get('security.context')->setToken($token);

我已经检查了数据库并且没有角色用户了。如果我注销并重新登录,$user->hasDefaultRole() 仍然返回 true。我在这里没有看到什么?或者这是预期的行为?

【问题讨论】:

    标签: symfony2 php symfony fosuserbundle


    【解决方案1】:

    FOSUserBundle 始终将默认角色 (ROLE_USER) 添加到角色列表中,以确保用户始终拥有至少一个角色,因此无论您做什么都无法将其删除。

    FOSUserBundle\Model\User

    /**
     * Returns the user roles
     *
     * @return array The roles
     */
    public function getRoles()
    {
        $roles = $this->roles;
    
        foreach ($this->getGroups() as $group) {
            $roles = array_merge($roles, $group->getRoles());
        }
    
        // we need to make sure to have at least one role
        $roles[] = static::ROLE_DEFAULT;
    
        return array_unique($roles);
    }
    

    FOSUserBundle\Model\UserInterface

    const ROLE_DEFAULT = 'ROLE_USER';
    

    此外,您将永远不会在数据库中找到 ROLE_USER,因为它实际上从未添加它。

    FOSUserBundle\Model\User

    public function addRole($role)
    {
        $role = strtoupper($role);
        if ($role === static::ROLE_DEFAULT) {
            return $this;
        }
    
        if (!in_array($role, $this->roles, true)) {
            $this->roles[] = $role;
        }
    
        return $this;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多