我的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/settings
,localhost/project/2/history
等,因为每条路由都调用不同的控制器功能。
但是我不需要检查其他以localhost/user
开头的路由,例如project/{projectId}
由于我不想将上面的代码添加到每个控制器中(因为会有很多子页面),因此可能会有一个更简单/更好的解决方案。
也许有人可以帮助我。请问是否需要更多详细信息。
Symfony:4.2.3