2013-06-26 53 views
0

我正在使用Symfony 2.3,但我找不到在两张桌子上添加安全性的好方案。两张桌子上的安全Symfony2

我有一个用户,该用户可以得到一个应用程序,他可以访问他的这条路径的应用程序:/应用/ {ID}

所以我想确保这一页,如果用户链接到应用程序。我做的东西在我的控制器检查,但这不是很干净:

/** 
* 
* @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] 

但我不明白真的如何在控制器使用

感谢您的帮助。

回答

1

首先

如果你想在你的控制器使用服务,做

$serv = $this->get('nameoftheservice); 
//then 
$serv->yourFunctionOfTheService(); 

你的情况:

$serv = $this->get('phone_application.test_user_application'); 
//then 
$serv->userApplication($id); 

另一个WA y以做到这一点:

如果$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 ! '); 
+0

感谢您的帮助 – Ajouve