用户和在symfony 2.8中,角色都是不同的

时间:2016-06-15 06:25:50

标签: symfony doctrine entity

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

用户实体

user
id
fname
lname
email

角色实体

roles
id
roles

user_roles实体

id
user_id
role_id

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用ManyToMany关系,因为它已记录在案here。在这种情况下,您只需要两个实体:userrole,其他所有实体都使用doctrine进行管理。请注意,在数据库中,您仍需要3个表格(userroleuser_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();
    }

答案 2 :(得分: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用户角色+自制角色系统,激活一段时间或永​​久复选框。