Php 两个表上的安全性Symfony2
我使用的是Symfony 2.3,我找不到一个好的解决方案来在两个表上添加安全性 我有一个用户,这个用户可以获得一个应用程序,他可以通过以下路径访问他的应用程序:/application/{id} 因此,如果用户链接到应用程序,我希望保护此页面。我做了一些检查我的控制器,但这不是很干净:Php 两个表上的安全性Symfony2,php,security,symfony,service,Php,Security,Symfony,Service,我使用的是Symfony 2.3,我找不到一个好的解决方案来在两个表上添加安全性 我有一个用户,这个用户可以获得一个应用程序,他可以通过以下路径访问他的应用程序:/application/{id} 因此,如果用户链接到应用程序,我希望保护此页面。我做了一些检查我的控制器,但这不是很干净: /** * * @param int $idApplication * @return UserApplication */ public function testUserApplication($
/**
*
* @param int $idApplication
* @return UserApplication
*/
public function testUserApplication($idApplication){
//get the application
$applicationRepository = $this->getDoctrine()->getRepository('PhoneApplicationBundle:Application');
$application = $applicationRepository->find($idApplication);
if($application==null){
return null;
}
$userApplicationRepository = $this->getDoctrine()->getRepository('PhoneApplicationBundle:UserApplication');
$userApplication = $userApplicationRepository->findOneBy(array(
'user' => $this->getUser(),
'application' => $application
));
return $userApplication;
}
我不知道我能不能用安全装置来做这件事
我尝试了另一个解决方案,创建一个服务来检查这一点
class Test
{
/** @var \Doctrine\ORM\EntityManager */
private $doctrine;
/**
* Constructor
*
* @param Doctrine $doctrine
*/
public function __construct(Doctrine $doctrine)
{
$this->doctrine = $doctrine;
}
public function userApplication($idApplication){
//get the application
$applicationRepository = $this->doctrine->getRepository('PhoneApplicationBundle:Application');
$application = $applicationRepository->find($idApplication);
if($application==null){
return null;
}
$userApplicationRepository = $this->doctrine->getRepository('PhoneApplicationBundle:UserApplication');
$userApplication = $userApplicationRepository->findOneBy(array(
'user' => $this->getUser(),
'application' => $application
));
return $userApplication;
}
}
service.yml:
parameters:
phone_application.test_user_application.class: Phone\ApplicationBundle\Service\Test
services:
phone_application.test_user_application:
class: %phone_application.test_user_application.class%
arguments: [@doctrine]
但我真的不明白如何在控制器中使用它
谢谢你的帮助。首先
如果要在控制器中使用服务,请执行以下操作
$serv = $this->get('nameoftheservice);
//then
$serv->yourFunctionOfTheService();
就你而言:
$serv = $this->get('phone_application.test_user_application');
//then
$serv->userApplication($id);
秒
另一种方法是:
如果$user
对象在控制器中完全可用,只需执行以下操作:
//get the app
$application = $this->getDoctrine()->getRepository('PhoneApplicationBundle:Application')->find($idApplication);
//check if this user owns this app, considering you have sets the right doctrine annotation for relation in your entity file
if($user->getApplications()->contains($application)) {
//do your stuff
}
else
throw new \Exception('No right there ! ');