Как насчет создания таблицы ролей с ManyToOne отношению к каждому пользователю. Одна строка таблицы Roles будет содержать роль (строка или константа int) и пользователь.
В качестве альтернативы вы можете создать таблицу ролей и иметь отношение ManyToMany к таблице User. Используя это, вы можете динамически определять роли, поэтому вам не нужно жестко указывать возможные роли.
В 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;
}
И не забывайте, что ваша модель пользователя должна реализовывать встроенный iSymfony n Пользовательский интерфейс.
Для групповых ролей, которые вы можете сделать это:
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;
}
}
Почему бы не использовать FOSUserBundle для этого? Он предоставляет все необходимое. – Flukey
Привет, переключился с FOSUserBundle на собственный Bundle :) Как создать новые роли в Symfony? –