0

Symfony 2.3 を使用していますが、2 つのテーブルにセキュリティを追加するための適切なソリューションが見つかりません。

私にはユーザーがいて、このユーザーはアプリケーションを取得できます。彼は次のパスでアプリケーションにアクセスできます: /application/{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]

しかし、コントローラーでこれを使用する方法がよくわかりません

手伝ってくれてありがとう。

4

1 に答える 1

1

初め

コントローラーでサービスを使用したい場合は、

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

あなたの場合:

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

2番

それを行う別の方法:

オブジェクトがコントローラーで完全に利用可能な場合は、次の$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 ! ');
于 2013-06-26T13:19:35.100 に答える