【问题标题】:get('security.context')->isGranted in functional testget('security.context')->isGranted 在功能测试中
【发布时间】:2012-06-09 12:52:25
【问题描述】:

我想对服务 Symfony2 进行一项功能测试。这个想法是先调用控制器,然后再用函数加载服务。功能就是这个:

function save($title,$description,$setId,$html,$validate,$articles){
    $articles = explode(',', $articles);

    if (false === $this->container->get('security.context')->isGranted('ROLE_USER')) {
        throw new \Exception("Not allowed");
    }else{
        $profileId  = $this->container->get('security.context')->getToken()->getUser()->getId();
        $userName   = $this->container->get('security.context')->getToken()->getUser()->getUserName();
    }
}

现在我的测试代码是:

    $client = static::createClient();

    $crawler = $client->request('GET','/sets/save',
            array(
                    "title"=>"rtyui",
                    "description"=>"aksdjhashdkjahskjdh",
                    "set_id"=>"",
                    "html"=>"",
                    "validate"=>1,
                    "articels"=>"3,4"
                )
        ); 

但我有这行代码已经不行了:

if (false === $this->container->get('security.context')->isGranted('ROLE_USER')) {
        throw new \Exception("Not allowed");

现在,问题是,我该如何进行验证过程?我已尝试按照文档所示执行此验证过程:

$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'username',
    'PHP_AUTH_PW'   => 'pa$$word',
));

但我遇到了同样的错误。

【问题讨论】:

    标签: symfony phpunit functional-testing


    【解决方案1】:

    您也可以通过安全令牌登录用户:

    $client = static::createClient();
    $container = $client->getContainer();
    $container->get('security.context')->setToken(
        new UsernamePasswordToken(
            $user, null, 'main', $user->getRoles()
        )
    );
    

    地点:

    1. $user - 角色为ROLE_USER 的用户实体实例,
    2. main - 您的安全提供商名称

    【讨论】:

    • 只使用$this->container->get('security.authorization_checker') 代替(2.6 中的新功能)
    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多