我正在为一个项目工作,因为我需要为用户提供解决方案。角色都是不同的实体。
用户实体
user
id
fname
lname
email
角色实体
roles
id
roles
user_roles实体
id
user_id
role_id
答案 0 :(得分:1)
您需要创建实现RoleInterface的Role类,并将其添加到具有ManyToMany关系的User类中,并返回getRoles()方法中的角色数组,就是这样。
答案 1 :(得分:0)
使用ManyToMany关系,因为它已记录在案here。在这种情况下,您只需要两个实体:user
和role
,其他所有实体都使用doctrine进行管理。请注意,在数据库中,您仍需要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();
}
答案 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用户角色+自制角色系统,激活一段时间或永久复选框。