ユーザーの認証に使用するロールをデータベースから取得しようとしています。これを行うために、次のコードのように Role を拡張するグループ オブジェクトを作成しました。
// src/Acme/Bundle/UserBundle/Entity/Group.php
namespace Acme\UserBundle\Entity;
use Symfony\Component\Security\Core\Role\Role;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="acme_groups")
* @ORM\Entity()
*/
class Group extends Role
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=30)
*/
private $name;
/**
* @ORM\Column(name="role", type="string", length=20, unique=true)
*/
private $role;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="groups")
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
// ... getters and setters for each property
/**
* @see RoleInterface
*/
public function getRole()
{
return $this->role;
}
}
私を混乱させるのは、このクラスと security.yml の対応する次のようなフィールドとの関係が見えないことです。
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
では、名前は : の右側にあり、役割は右側にあるでしょうか? たとえば、
ROLE_ADMIN: ROLE_USER
ROLE_ADMIN がグループ名になり、ROLE_USER がロールになりますか? また、symfony2 が role プロパティを配列ではなく単一の変数として実装する方法もわかりません。声明の中で以来
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
1つの役割だけでなく、複数の役割があります。上記で定義されたクラスにどのように対応しますか? 私は symfony2 クックブックhttp://symfony.com/doc/current/cookbook/security/entity_provider.html#managing-roles-in-the-databaseに従っています。