我还实现了FOSUserBundle组,它还包含一组角色,用户可以分配给这些角色.所以,我在这里理解的是,我们可以创建组以分配一组角色,以便可以使用组访问类似的角色.
现在,我在哪里卡住的是,什么是使用组如果设置的角色可以从用户实体单独或我怎么能合并来自用户实体和集团实体或东西,我很想念这里的角色进行管理的目的是什么?
Q: what is the purpose of using groups if set of roles can be managed from User Entity alone
答:答案可以从Using Groups With FOSUserBundle中提取:
Symfony2 supports role inheritance so inheriting roles from groups is
not always needed. If the role inheritance is enough for your use
case,it is better to use it instead of groups as it is more efficient
(loading the groups triggers the database).
问:如果你问自己:什么是一组角色?或者当我需要使用一组角色?
答:实质上,“群组”包含一组角色,按共同特征(如电子商务的类别)进行分类.例如,具有ROLE_ADMIN作为公共角色的控制面板应用程序的用户可能属于MANAGER组,而其他用户属于REVISER(这取决于您的需要).将用户角色分类为组可以更轻松地控制大量用户对特定工具或服务的访问.因此,使用或不使用角色组完全取决于您希望对应用程序执行的操作以及用户可以使用的交互数量.
Q: how can I merge the roles from User entity and Group entity or
something I am missing here?
答:如果角色继承不够并且您想使用“组”,则需要在User – >之间创建关联.组 – >像这个实现示例的角色实体:
用户实体:
use Doctrine\Common\Collections\ArrayCollection; /** * USER ManyToMany with GROUP Unidirectional association * @var ArrayCollection * @ORM\ManyToMany(targetEntity="Group") * @ORM\JoinTable(name="user_groups") * @Assert\Valid */ protected $groups; public function __construct() { $this->groups = new ArrayCollection(); <-- add this line to the constructor } /** * Get all Groups added to the administrator * @return ArrayCollection $groups */ public function getGroups() { return $this->groups; } /** * Add Group $group to the administrator * * @param \Group $group * @return void */ public function addGroup(Group $group) { if (!$this->groups->contains($group)) { $this->groups->add($group); } } /** * Remove Group from the user * @param \Group $group * @return void */ public function removeGroup(Group $group) { if ($this->groups->contains($group)) { $this->groups->removeElement($group); } } /** * Get all Roles added to the User * @return array */ public function getRoles() { $roles = []; /** @var ArrayCollection $groups */ $groups = $this->getGroups(); foreach ($groups as $group) { $roles = array_merge($roles,$group->getRoles()->toArray()); } $roles = array_unique($roles); # store the roles in the property to be serialized $this->roles = $roles; return $roles; }
集团实体:
/** * GROUP ManyToMany with ROLE Unidirectional Association * @var ArrayCollection * @ORM\ManyToMany(targetEntity="Role") * @ORM\JoinTable(name="user_group_roles") * @Assert\Valid */ protected $roles; public function __construct() { $this->roles = new ArrayCollection(); } /** * Return all Roles added to this Group * * @return \Doctrine\Common\Collections\ArrayCollection $roles */ public function getRoles() { return $this->roles; } /** * Add Role $role to the Group * * @param Role $role * @return void */ public function addRole(Role $role) { if (! $this->roles->contains($role)) { $this->roles->add($role); } } /** * Remove Role from the Group * * @param Role $role * @return void */ public function removeRole(Role $role) { if ($this->roles->contains($role)) { $this->roles->removeElement($role); } }
就这样.希望对你有所帮助.