是否可以通过搜索字段使用“switch_user”

Is it possible to use `switch_user` through a search field?

本文关键字:switch user 可以通过 搜索 字段 是否      更新时间:2023-09-26

我正在尝试填充要在搜索框中使用的值,以便超级用户可以模拟其他用户。然而,我遇到了下面列出的问题,我不确定是否有统一的解决方案,或者至少有一种"正确"的方法来处理它:

  1. 如何传递脚本的搜索字符串和用户名值
  2. 如何重新加载当前页面,但使用?_switch_user=jsmith补充路径(例如)
  3. 如果超级用户在模拟一个用户(如jsmith)和另一个普通用户之间切换,我会得到一个错误:

    您已经切换到"jsmith"用户。

我的搜索表单:

<form class="navbar-form navbar-left" role="search">
   <div class="form-group">
      <input type="search" id="search-names" class="form-control" placeholder="Enter username to switch to">
   </div>
   <button type="submit" class="btn btn-default">Submit</button>
</form>

脚本:

这是在我的基础树枝模板中(因为表单在所有页面的导航栏中)。我实际使用的代码是var searchnames = ["Smith, John",...,但我需要以某种方式传递所选的用户名(例如jsmith)来重新加载同一页面,但以?_switch_user=jsmith为参数:

<script>
$(function() {
    var searchnames = [
    "Smith, John" => "jsmith",
    "Doe, Jane"   => "jdoe1990",
    ];
    $( "#search-names" ).autocomplete({
    source: searchnames
    });
});
</script>

我的想法是从我的UserRepository中传递一个所有名称/用户名的列表,并将它们全部填充到trick中。除此之外,我不知道从哪里开始传递?_switch_user= 的参数

这是PHP中的一个关联数组:

var searchnames = [
  "Smith, John" => "jsmith",
  "Doe, Jane"   => "jdoe1990",
];

在JavaScript中,只有普通的数组和对象。对象可以用于键/值对。

源选项可以采用一组对象。每个对象都有一个valuelabel属性。

[
  { "label": "Smith, John", "value": "jsmith" },
  { "label": "Doe, Jane", "value": "jdoe1990" }
]

如果你有一组固定的用户,你可以简单地将他们添加到你的JavaScript函数中,仅此而已。

然而,用户可能来自数据库。您可以创建系统中所有用户的对象,将它们传递到(Twig)视图,并使用json_encode过滤器输出它们。然而,这是一种糟糕的做法,因为它会使HTML膨胀并增加安全风险。(o.a.即使您注销,所有用户仍在浏览器缓存中。)

相反,您可能想要使用AJAX。您可以将source选项设置为URL,该URL由您的用户控制器处理。(请参阅jQuery UI远程示例。)

$("#search-names).autocomplete({
  source: "/users/search"
});

搜索动作查询数据库并创建具有相关联的阵列的阵列,每个阵列具有valuelabel关键字。然后将其输出为JSON。

选择选项后加载页面的最后一步操作。这可以在JavaScript中通过设置window.location来完成。

$("#search-names").autocomplete({
  source: "/users/search",
  change: function() {
    var username = $(this).val();
    if (!username) return;
    window.location = window.location + '?_switch_user=' + username;
  }
});

该代码未经测试,可能需要进行一些修改才能真正工作