Wie über eine Tabelle Rollen mit ManyToOne Bezug auf jeden Benutzer zu erstellen. Eine Zeile der Tabelle Rollen enthält eine Rolle (Zeichenfolge oder Konstante int) und einen Benutzer.
Alternativ können Sie eine Rolle-Tabelle erstellen und eine ManyToMany-Beziehung mit der Benutzertabelle haben. Mit dieser Funktion können Sie Rollen dynamisch definieren, sodass Sie die möglichen Rollen nicht fest codieren müssen.
Im OneToMany Fall könnten Sie die Rollen abrufen, indem Sie eine solche Funktion zu schreiben:
/** @OneToMany(...) */
/** $roles contains strings */
protected $roles;
public function getRoles() {
return $this->roles;
}
ODER
/** @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;
}
Im ManyToMany Fall, dass Sie durch das Schreiben eine solche Funktion, die Rollen abrufen können:
/** @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;
}
Und vergessen Sie nicht, dass Ihr Benutzermodell Symfony's Built-i implementieren muss n Benutzeroberfläche.
Für Gruppen Rollen, die Sie dies tun können:
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;
}
}
Warum nicht verwenden FOSUserBundle dafür? Es bietet alles, was Sie brauchen. – Flukey
Hallo, ich habe von FOSUserBundle zu einem eigenen Bundle gewechselt :) Wie erstelle ich neue Rollen in Symfony? –