用户和角色在 symfony 2.8 中是不同的实体

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

我正在开发一个项目,因为我需要为不同实体的用户和角色提供解决方案。

用户实体

user
id
fname
lname
email

角色实体

roles
id
roles

user_roles 实体

id
user_id
role_id
php symfony doctrine entity
3个回答
1
投票

您需要创建实现 RoleInterface 的 Role 类,并将其添加到具有 ManyToMany 关系的 User 类中,并在 getRoles() 方法中返回角色数组,就是这样。


0
投票

使用多对多关系,如此处所述。在这种情况下,您只需要两个实体:

user
role
,其他一切都由教义管理。请记住,在数据库中您仍然需要 3 个表(
user
role
user_role
)。

示例:

/** @Entity */
class User
{
    // ...

    /**
     * @ManyToMany(targetEntity="Role")
     * @JoinTable(name="user_role",
     *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id", unique=true)}
     *      )
     */
    private $roles;

    public function __construct()
    {
        $this->roles = new \Doctrine\Common\Collections\ArrayCollection();
    }

0
投票

这是我的用户实体中的 getRoles 函数的示例:

    /**
     * Returns the user roles.
     *
     * @return array The roles
     */
    public function getRoles()
    {
        $now = new \DateTime();
        $roles = $this->roles;

        foreach ($this->getGroups() as $group) {
            $roles = array_merge($roles, $group->getRoles());
        }

        foreach ($this->getUserApplicationsPermissions() as $uap) {
            if (
                $uap->getPermanent() ||
                ($uap->getStartDate() < $now && !$uap->getEndDate()) ||
                ($uap->getStartDate() < $now && $uap->getEndDate() > $now)
            ) {
                $roles = array_merge($roles, array($uap->getApplicationPermission()->getLibelle()));
            }
        }

        // we need to make sure to have at least one role
        $roles[] = static::ROLE_DEFAULT;

        return array_unique($roles);
    }

我的目标是处理fos用户角色+自制的角色系统,具有激活期或永久复选框。

© www.soinside.com 2019 - 2024. All rights reserved.