0

我已经用 silex 开始了一个项目……我进行了身份验证,一切正常。但是现在,我想获取一些用户的数据,并且我在自定义 UserProvider 中使用的 User 类(来自此示例Silex doc - Defining a custom User Provider)是最终的,所以我不能覆盖它。我打算使用 loadUserByUsername() 中的查询来获取所有信息,以限制对数据库的访问。

覆盖 Symfony\Component\Security\Core\User 是正确的方式还是我必须创建另一个用户管理器,如果是这样,如何以正确的方式进行?

谢谢

4

1 回答 1

3

通过添加类似的方法来覆盖您的自定义 UserProvider 是正确的方法

  • 查找($用户 ID)
  • 找到所有()
  • 保存($用户)
  • 删除($UserId)

public function buildObject(array $rowFromDatabase) {
    $user = new MyUser();
    $user->setId($row["id"]);
    $user->setUsername($row["username"]);
    $user->setSalt($row["salt"]);
    $user->setRole($row["role"]);
    $user->setPassword($row["password"]);
    return $user;
}

MyUser是您实现 UserInterface 的POJO

那么你的 loadUserByUsername 将是

public function loadUserByUsername($username) {
    $sql = "SELECT * FROM MyUserTable WHERE username = ?";
    $row = $this->getDB()->fetchAssoc($sql, array($username));

    if($row) {
        return $this->buildDomainObject($row);
    }else{
        throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
    }
}

并限制与数据库的连接,您可以使用 DAO 模式。

于 2015-06-05T12:17:17.893 回答