各ユーザーとの ManyToOne 関係を持つ Roles テーブルを作成するのはどうですか。Roles テーブルの 1 つの行には、役割 (文字列または定数 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 のビルトイン User インターフェースを実装しなければならないことを忘れないでください。
グループの役割の場合、次のことができます。
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;
}
}