Php Symfony2身份验证系统逻辑问题
我正试图结合Symfony本身编写一个授权系统。我的逻辑是这样的:Php Symfony2身份验证系统逻辑问题,php,symfony,Php,Symfony,我正试图结合Symfony本身编写一个授权系统。我的逻辑是这样的: 有一个User表,其中包含系统用户 有一个Role表负责管理角色 有一个权限表,用于保存网站权限的每个部分 有一个User\u Role表告诉我们哪个用户是哪个角色 有一个定义每个角色权限的Role\u Permission表 我已经在数据库中创建了表及其关系。并将它们导入Symfony(创建的实体) 现在的问题是: /** *@doc */ 公共函数getRoles() { 返回数组('ROLE_TEST'); } 如何在角
User
表,其中包含系统用户Role
表负责管理角色权限
表,用于保存网站权限的每个部分User\u Role
表告诉我们哪个用户是哪个角色Role\u Permission
表/**
*@doc
*/
公共函数getRoles()
{
返回数组('ROLE_TEST');
}
如何在角色数组中加载每个用户的角色
public function getRoles()
{
$roles = array();
// Checking that the user has permissions attached
if ($this->getPermissions() !== null)
{
// Looping on the permissions
foreach($this->getPermissions() as $permission)
{
// Checking that the permission has roles attached
if ($permission->getRoles() !== null)
{
// Looping on the roles for each permission
foreach($permission->getRoles() as $role)
{
$roles[] = $role->getName();
}
}
}
}
return $roles;
}
更好的解决方案是创建UserManager服务,并通过条令查询生成器获取角色(减少对数据库的调用):
多亏了纪尧姆,我找到了另一个解决办法。 我创建了一个只返回用户id和用户角色的视图(按视图创建4个表) 最后在用户和用户角色(视图)表之间建立逻辑关系。 一切正常
/** @var EntityManager $this->em */
$roles = $this->em->createQueryBuilder()
->select('r')
->from('AcmeBundle:Role', 'r')
->innerJoin('r.permissions', 'p')
->innerJoin('p.users', 'u')
->where('u = :user')
->setParameter(':user', $user)
->getQuery()
->getResult()
;