这就是我正在做的事情,对我来说效果很好:
我有一个用户、角色和一个组实体
用户实体
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
集团实体
use FOS\UserBundle\Model\Group as BaseGroup;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_group")
*/
class Group extends BaseGroup
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
所有这些都来自FOS 文档
现在角色默认以数组的形式出现,但 symfony 提供了一个 Symfony\Component\Security\Core\Role\Role 类来扩展它。
所以你的角色类应该是这样的:
角色实体
use Symfony\Component\Security\Core\Role\Role as BaseRol;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_role")
*/
class Role extends BaseRol
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
要做到这一点,您只需添加映射信息,如下所示。
支持用户实体中的组
/**
* @ORM\ManyToMany(targetEntity="path/to/my/groupEntity")
* @ORM\JoinTable(name="join_table_name",
* joinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")}
* )
*/
protected $groups;
支持组和用户实体中的角色
/**
* @ORM\ManyToMany(targetEntity="path/to/my/roleEntity")
* @ORM\JoinTable(name="join_table_name",
* joinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="join_column_name_id", referencedColumnName="id")}
* )
*/
protected $roles;
之后更新您的数据库,您就可以开始了。