如何在 Symfony 2 中通过伪造登录来测试 ACL 进行开发

2023-11-25

我正在开发基于 Symfony 2 的 Web 应用程序的一部分。与许多应用程序一样,需要身份验证和授权。我如何继续开发,通过传递或伪造登录来考虑 ACL?

在文档中,login_check身份验证和会话部分是否透明。我想我可能需要实现一个版本,或者以某种方式调用它以不同的用户/角色登录


我不完全确定我理解你的问题,但你只是问你如何以编程方式登录?

在我的测试中,我只需进行如下调用:

$this->container->get('security.context')->setToken(
    new UsernamePasswordToken(
        'maintenance', null, 'main', array('ROLE_FIXTURE_LOADER')
    )
);

在这种情况下,“维护”甚至不是一个真正的用户实体,它只是我为我的设备编写的用户名,以便他们可以通过以下方式访问服务:ROLE_FIXTURE_LOADER但如果您确实想以完整用户实体身份登录(以便他们具有正确的 ACL ID),您可以获得$user从数据库中获取对象并调用:

$this->container->get('security.context')->setToken(
    new UsernamePasswordToken(
        $user, null, 'main', $user->getRoles())
    )
);

这不会执行完整登录,但它确实可以与 RBAC 一起使用,而且我不明白为什么如果您传递实际的用户对象,它就不能与 ACL 一起使用。

至于我的前端的功能测试,如果我需要登录,我只需导航到登录页面并根据测试文档提交表单。对于其中任何一个工作,您确实需要访问容器,因此您需要扩展WebTestCase或者推出您自己的启动内核的能力(请参阅here).

我有一种感觉,我误解了这个问题(即你需要做一些比仅仅放置令牌更复杂的事情)。也许你可以尝试进一步澄清你的意思

传递或伪造登录信息

在测试中植入安全令牌的具体示例:

首先,我们创建一个基类供测试使用,其中包含登录便捷方法。这可以通过扩展来完成WebTestCase并使用getContainer上的方法client或者你可以拉WebTestCase除了滚动你自己的基类之外,它只在没有客户端的情况下启动内核并返回容器(请参阅我的link有两种解决方案可以实现这一目标)。

namespace Acme\SomeBundle\Tests;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

abstract class AcmeTestCase extends WebTestCase {

    protected function loginAs($client, $username) {
        $container = $client->getContainer();
        $doctrine = $container->get('doctrine');

        $user = $this->loadUser($doctrine, $username);

        // First Parameter is the actual user object.
        // Change 'main' to whatever your firewall is called in security.yml
        $container->get('security.context')->setToken(
            new UsernamePasswordToken(
                $user, null, 'main', $user->getRoles()
            )
        );
    }

    private function loadUser($doctrine, $username) {
        // Don't have to use doctrine if you don't want to, you could use
        // a service to load your user since you have access to the
        // container.

        // Assumes User entity implements UserInterface
        return $doctrine
                ->getRepository('AcmeUserBundle:User')
                ->findOneByUsername($username);
    }

}

然后您只需在您希望的任何测试中使用您的基类即可。就像这样:

namespace Acme\SomeBundle\Tests\Entity;

use Acme\SomeBundle\Tests\AcmeTestCase;

class SomeEntityTest extends AcmeTestCase {

    public function somethingTest() {
        $this->loginAs(static::createClient(), 'SomeUsernameInDB');

        // Do the rest of your test here.
    }

}

希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Symfony 2 中通过伪造登录来测试 ACL 进行开发 的相关文章

  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • 为 Symfony 指定备用后备路径以查找捆绑包的树枝模板

    基本问题 如何让 symfony 在非标准目录中查找 最佳 自定义 Twig 模板来加载捆绑视图 Symfony 文档说默认情况下它会在两个位置查找覆盖 Twig 模板 http symfony com doc current book t
  • 使用 Google Storage Transfer API 将数据从外部 GCS 传输到我的 GCS

    我正在开发一个由 ReactJs 前端和 Java SpringBoot 后端组成的 Web 应用程序 该应用程序要求用户将数据从他们自己的 Google Cloud 存储上传到我的 Google Cloud 存储 申请流程如下 前端请求用
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 为什么我们需要多个渲染通道和子通道?

    我过去有过使用 DirectX12 的经验 但我不记得 Vulkan 中类似渲染通道的东西 所以我无法进行类比 如果我理解正确 则同一子通道内的命令缓冲区不需要同步 那么为什么要复杂化并制作多个呢 为什么我不能只使用一个命令缓冲区并将所有与
  • 将元组添加到 pandas 数据框的特定单元格

    正当我以为我已经掌握了 Python 和 Pandas 的窍门时 另一个看似简单的问题出现了 我想将元组添加到 pandas 数据框的特定单元格 这些元组需要根据数据框中其他单元格的内容即时计算 换句话说 我无法轻松地提前计算所有元组并将它
  • 仅当成功保存父对象时才保存对 has_many 关联的更改吗?

    假设每个Project has many Tasks If I do some project tasks list of tasks some project save 即使保存失败 项目的任务也会更新 如果list of tasks由新
  • 在 emacs 中将预处理器指令缩进为 C 代码

    默认情况下 Emacs 不缩进预处理器代码 我知道它有历史根源 但现在已经过时了 然而 具有大量未缩进的 ifdef 的代码很难阅读 所以我想让 emacs 自动缩进给我类似的东西 void myfunc int foo ifdef BAR
  • Python mysql.connector InternalError:关闭游标时发现未读结果

    我想从光标读取部分结果 然后关闭它而不读取所有结果 cursor close raises InternalError Unread result found 是否可以关闭游标而不迭代所有结果或使用缓冲选项 Update 我的查询得到大约
  • Visual Studio Code 无法使用“code”命令打开

    当我尝试从命令行打开 VSCode 时code 我收到错误 MacOS Electron No such file or directory 我怎样才能解决这个问题 如果您遇到以下错误 usr local bin code line 6 u
  • 在同一个 UI 中使用 QVTKWidget 和 QOpenGLWidget?

    我正在开发一个使用自定义子类的项目QOpenGLWidget显示一些效果图 结束时paintGL 它调用小部件的方法update 方法触发重绘事件 如果它可见 现在我想添加一个额外的QVTKWidget到我的用户界面 我通过使用这样的东西来
  • 在条形图中设置轴标签和刻度线的不同位置

    我想重新对齐 偏移条形图的 x 轴和相关刻度线 这应该很简单 但我很难找到答案 下面是一些包含 24 个类别的示例数据 xval c 1 24 count c 0 03 0 03 0 08 0 06 0 11 0 4 0 3 0 5 0 5
  • 为什么 Safari 不接受 GZIP 压缩?

    我这里有一个相当大的 JavaScript 文件 我想将其嵌入到我的网站中 HTTP 服务器足够智能 可以在将文件传送到浏览器之前对其进行 GZIP 不过 我用 Google Chrome 和 Safari 进行了测试 在 Chrome 上
  • spring TransactionTemplate 和 SimpleJdbcTemplate 是线程安全的吗?

    我目前正在处理的代码中 有一个单例被许多线程使用 除了 TransactionTemplate 和 SimpleJdbcTemplate 的两个字段之外没有状态 这两个字段在单例的函数中用于访问数据库 这安全吗 还是我应该在需要时创建一个新
  • ./ 和 ~/ 之间的区别

    创建文件路径和 URL 时 我注意到很多时候路径以 or 以以下开头的文件路径有什么区别 and 它们各自的含义是什么 为了完整起见 Just path是一个名为的文件或目录path在当前目录中 path是一个名为的文件或目录path在当前
  • 如何更新 Rails 语言环境 YML 文件而不丢失注释和变量?

    我正在构建一个 Ruby 脚本来更改 config locales yml Rails 语言环境文件的内容 这些文件包含许多有用的注释和变量 通过加载 更新和转储它们 我丢失了这些注释和变量 如何以编程方式更新 YAML 文件 同时保留注释
  • 分支在 ?: 运算符?

    对于现代硬件上的典型现代编译器 运算符结果会产生影响指令管道的分支吗 换句话说 调用这两种情况以避免可能的分支 哪个更快 bool testVar someValue Used later purge white purge black 或
  • 如何隐藏 Html 日历面板中的年份部分?

    有没有办法隐藏年份部分 html 日历面板 只显示日历上的月份和日期部分 不幸的是 没有简单的答案 但是您可以使用替代方法 通过使用 JavaScript 强制用户仅输入月份和日期 var year new Date getFullYear
  • 按 ID 删除数百万行的最佳方法

    我需要从 PG 数据库中删除大约 200 万行 我有一个需要删除的 ID 列表 然而 我尝试做到这一点的任何方法都需要几天的时间 我尝试将它们放入表中并以 100 为一批进行操作 4 天后 该操作仍在运行 仅删除了 2972 68 行 我必
  • 带有数字和默认键盘的 UITextField

    为 邮政编码 邮政编码 字段创建了一个 UITextField 其键盘类型为 UIKeyboardTypeDefault 我想使用默认键盘 但希望默认显示数字和符号与字母相对应 当您在 Contacts app 中输入地址时 Apple 会
  • 使用 crontab 运行脚本时无法导入 Python MySQL 模块

    我正在使用 crontab 运行需要 MySQLdb 模块的 python 脚本 当我从命令行运行此脚本时 一切正常 但是 尝试使用 crontab 运行它会引发此错误 Traceback most recent call last Fil
  • Apple 的文本渲染如何绘制字体没有的字形?

    我对字体和编码有了基本的了解 但最近我不得不在我的舒适区之外做一些事情 转动字符 0x2716 重乘 x 变为CGPathRef 我使用了核心文本CTFontGetGlyphsForCharacters来完成这项工作 我明白 一个CGGly
  • 无法将不可变值作为 inout 参数传递:文字不可变,为什么?

    我想做一个函数来交换两个变量 但对于新的 swift 我不能使用 var import UIKit func swapF inout a Int inout with b Int print x a and y b a b b a prin
  • 如何在 Symfony 2 中通过伪造登录来测试 ACL 进行开发

    我正在开发基于 Symfony 2 的 Web 应用程序的一部分 与许多应用程序一样 需要身份验证和授权 我如何继续开发 通过传递或伪造登录来考虑 ACL 在文档中 login check身份验证和会话部分是否透明 我想我可能需要实现一个版