理解 Symfony 5 Doctrine ManyToOne 与用户和角色的关系概念

问题描述 投票:0回答:1

我正在尝试理解 Doctrine ORM 关系概念,因为据我所知,我花了很多时间来创建一个非常简单的用例,但是,我没能做到这一点,因为我的知识匮乏...

这是我的问题: 我有 2 个实体,UserApp 和 RoleApp。

我希望能够管理用户扔到数据库中的角色,而不是以数组格式直接将角色硬编码到用户表中。为此,我在

role_id
表中添加了一个经典的外键
user_app
,该外键将主键引用到
role_app
表中。

我需要为每个用户获取他的角色,并将其采用 Symfony 身份验证所需的正确格式:


        class UserApp implements UserInterface, \Serializable{
    .....
    /**
     * @var UserRole
     * @ORM\ManyToOne(targetEntity="App\Entity\UserRole")
     * @ORM\JoinColumn(nullable=false)
     *
     */
    private $role;

    public function getUserRole(): array{ // I know it's wrong but I don't know what is the right type to get 

        return $this->role->getUserRole($this);
    }

    /**
     * Returns the roles or permissions granted to the user for security.
     */
    public function getRoles(): array{
    //$role = ["ADMIN_USER"];
    $role = $this->getUserRole();
    dump($role);

    return array_unique($role);


class UserRole{
    /**
     * @ORM\Column(type="json")
     */
    private $appRole = [];

    public function getUserRole(UserApp $user): ?array
    {
        $userRoleRepository = new UserRoleRepository();
        $userRole[] = $userRoleRepository->find(1);
        dump($userRole);
        return $userRole;
    }

}

但是此代码没有为 Symfony 身份验证的用户角色需求提供正确的格式:(

php authentication symfony doctrine many-to-one
1个回答
1
投票

我终于做到了我想做的事;这是我的解决方案,希望它能有所帮助......

   class UserApp implements UserInterface, \Serializable
   {
  ....
      /**
     * @var UserRole
     * @ORM\ManyToOne(targetEntity="App\Entity\UserRole")
     * @ORM\JoinColumn(nullable=false)
     *
     */
    private $role;

    public function getUserRole(): UserRole
    {
        return $this->role->getRoleUser($this);
    }

    /**
     * Returns the roles or permissions granted to the user for security.
     * it's for authentification compliance
     */
    public function getRoles(): array
    {
        $arrRole = $this->getUserRole()->getAppRole();
        return array_unique($arrRole);
    }

    ......

    class UserRole{

    .....
    /**
     * @ORM\Column(type="json")
     */
    private $appRole = [];//For authentification compliance

    .....
   public function getRoleUser(UserApp $user): ?self
    {
        return $this;
    }`enter code here`
© www.soinside.com 2019 - 2024. All rights reserved.