Symfony:拒绝用户访问(基于分配的数据库条目)

时间:2019-02-19 14:44:46

标签: symfony events permissions controller routes

我的Symfony项目有以下课程:

  • 用户

  • 项目


每个用户都被分配到一个或多个项目(每个数据库)。

访问项目的总路径为:localhost/project/2(ID为2的项目)。

现在,我需要检查用户是否可以在控制器内部访问此项目。

例如User1可以访问Project1,但不能访问Project2

控制器:

    /**
     * @Route("/project/{projectId}", requirements={"projectId"="\d+"}) //projectId needs to be integer
     * @IsGranted("ROLE_USER")
     */
    public function project($projectId)
    {
        $error = null;
        $project = $this->getDoctrine()->getRepository(Project::class)->find($projectId); //find project in database
        if (!$project) {
            $error = 'project_not_found';
        } else {
            //project found
            if (!$project->getUsers()->contains($this->getUser())) { //check if project has current user assigned
                $error = 'project_user_not_found';
            }
        }

        return $this->render('project.html.twig', [
            'error' => $error
        ]);
    }

此解决方案对我有用。


主要问题: 我需要检查登录用户是否有权访问每个子页面中的项目,例如localhost/project/2/settingslocalhost/project/2/history等,因为每条路由都调用不同的控制器功能。

但是不需要检查其他以localhost/user开头的路由,例如project/{projectId}

由于我不想将上面的代码添加到每个控制器中(因为会有很多子页面),因此可能会有一个更简单/更好的解决方案。

也许有人可以帮助我。请问是否需要更多详细信息。


Symfony:4.2.3

0 个答案:

没有答案