Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2身份验证系统逻辑问题_Php_Symfony - Fatal编程技术网

Php Symfony2身份验证系统逻辑问题

Php Symfony2身份验证系统逻辑问题,php,symfony,Php,Symfony,我正试图结合Symfony本身编写一个授权系统。我的逻辑是这样的: 有一个User表,其中包含系统用户 有一个Role表负责管理角色 有一个权限表,用于保存网站权限的每个部分 有一个User\u Role表告诉我们哪个用户是哪个角色 有一个定义每个角色权限的Role\u Permission表 我已经在数据库中创建了表及其关系。并将它们导入Symfony(创建的实体) 现在的问题是: /** *@doc */ 公共函数getRoles() { 返回数组('ROLE_TEST'); } 如何在角

我正试图结合Symfony本身编写一个授权系统。我的逻辑是这样的:

  • 有一个
    User
    表,其中包含系统用户
  • 有一个
    Role
    表负责管理角色
  • 有一个
    权限
    表,用于保存网站权限的每个部分
  • 有一个
    User\u Role
    表告诉我们哪个用户是哪个角色
  • 有一个定义每个角色权限的
    Role\u Permission
  • 我已经在数据库中创建了表及其关系。并将它们导入Symfony(创建的实体)

    现在的问题是:

    /**
    *@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()
    ;