【问题标题】:symfony 3: how to add role to specific usersymfony 3:如何为特定用户添加角色
【发布时间】:2018-04-18 15:56:54
【问题描述】:

它看起来很简单,我是 Symfony 的初学者,但无法弄清楚。

我正在使用 FOSUserBundle,并且我正在尝试将特定角色 (ROLE_ADMIN) 添加到特定用户(例如我),以便在用户登录时分配该角色并且他可以访问某些页面。

我尝试在我的 User 实体的 __construct() 方法中添加这样的内容,但没有成功:

if($this->getUsername()=='johndoe') $this->addRole('ROLE_ADMIN');

当我以该用户身份登录时,调试实用程序仅显示“ROLE_USER”,操作系统无法正常工作。

这是正确的代码吗?我应该把它放在哪里?

更新:

偶然发现了一个愚蠢的错误。在安装 FOSUserBundle 之前,我已经创建了 User 实体,并且不知何故,我试图提升的用户通过 CLI 给了我错误。也许它没有正确存储在数据库中。一旦我创建了一个新命令并再次尝试,该命令按预期工作。

【问题讨论】:

    标签: symfony roles


    【解决方案1】:

    如果您可以访问数据库,只需更新roles 列:

    ["ROLE_ADMIN"]
    

    【讨论】:

      【解决方案2】:

      您不应在运行时添加角色,请将其添加给用户,例如使用documentation 中所写的 CLI 命令(或直接在数据库中更改):

      php bin/console fos:user:promote testuser ROLE_ADMIN
      

      如果您坚持在运行时更改角色,那么了解您的确切目标以及原因会非常好。

      另一种选择是将单个特殊用户加载为内存中用户,如 here 所写:

      # app/config/security.yml
      security:
          providers:
              in_memory:
                  memory:
                      users:
                          johndoe:
                              password: somepassword
                              roles: 'ROLE_ADMIN'
      

      【讨论】:

      • 我没有实现数据库中的角色,因为我只需要一个用户使用它,并且认为它应该很容易做到。我曾尝试使用命令行,但收到​​一个错误:[Symfony\Component\Debug\Exception\ContextErrorException] 警告:in_array() 期望参数 2 为数组,给定为 null 所以我卡住了!感谢您的帮助
      • 那么,如果您只是针对一位特殊用户,为什么还要使用角色概念呢?
      • 用另一个选项更新了我的答案 - 我仍然强烈建议不要在代码中“配置”您的单个用户。
      • 这是一个简单的项目,只为少数用户保留了一堆页面。我认为将 ROLE_ADMIN 分配给这些用户并在控制器中添加 @Security 注释可能是一个很好的解决方案。
      • 感谢 LBA,找到问题的根源(更新后)。一旦解决,你的建议就完美了。
      【解决方案3】:

      试试这个

          $userObject=$this->getUser();
           $username = $userObject->getUsername();
           if($username == 'johndoe')
           {
              $user = $this->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);
              $user->setRoles( array('ROLE_ADMIN') );
              $userManager->updateUser($user, true);
          }
      

      【讨论】:

      • 他为什么要那样做?
      猜你喜欢
      • 2019-12-11
      • 2019-09-24
      • 2020-11-20
      • 2014-07-16
      • 2020-05-14
      • 2023-02-19
      • 1970-01-01
      • 2022-01-18
      • 2019-08-11
      相关资源
      最近更新 更多