如何为每个用户创建一个具有 ManyToOne 关系的 Roles 表。Roles 表的一行将包含一个角色(字符串或常量 int)和一个用户。
或者,您可以创建一个 Roles 表并与 User 表建立 ManyToMany 关系。使用它,您可以动态定义角色,因此您不必对可能的角色进行硬编码。
在 OneToMany 案例中,您可以通过编写这样的函数来检索角色:
/** @OneToMany(...) */
/** $roles contains strings */
protected $roles;
public function getRoles() {
return $this->roles;
}
或者
/** @OneToMany(...) */
/** $roles contains integers */
protected $roles;
public function getRoles() {
$rolesArr = array(1 => 'ROLE_ADMIN', 2 => 'ROLE_USER', 3 => 'ROLE_EDITOR'); // you should refactor $rolesArr
$retRoles = array();
foreach($this->roles as $role) {
$retRoles[] = $rolesArr[$role];
}
return $retRoles;
}
在 ManyToMany 案例中,您可以通过编写这样的函数来检索角色:
/** @ManyToMany(...) */
protected $roles;
// ...
public function getRoles() {
$retRoles = array();
// symfony2 requires a string array
foreach($this->roles as $role) {
$retRoles[] = $role->getName(); // or $retRoles[] = 'ROLE_' . $role->getName();
}
return $retRoles;
}
并且不要忘记您的 User 模型必须实现 symfony 的内置用户界面。
对于组角色,您可以这样做:
class Group
{
/** @ManyToMany(...) */
protected $roles;
public function getRoles() {
return $this->roles;
}
}
class User
{
/** @ORM\Column(...) */
protected $group;
/** @ManyToMany(...) */
protected $roles;
// ...
public function getRoles() {
$retRoles = array();
// symfony2 requires a string array
$roles = $this->roles->merge($this->group->getRoles());
foreach($roles as $role) {
$retRoles[] = $role->getName(); // or $retRoles[] = 'ROLE_' . $role->getName();
}
return $retRoles;
}
}