创建用户后无法为“page_slug”生成 URL
Posted
技术标签:
【中文标题】创建用户后无法为“page_slug”生成 URL【英文标题】:Unable to generate a URL for "page_slug", after creating a user 【发布时间】:2013-10-21 14:59:29 【问题描述】:我有一个奇怪的问题。我安装并配置了 SonataUserBundle 以使用 FosUserBundle 和 SonataAdminBundle。安装没有任何问题,一切似乎都运行良好,除非我通过 sonataUserBundle 网页创建另一个用户。一旦我创建了用户(并且它是在我查看数据库时创建的),我就再也看不到用户列表了。当我点击返回用户列表时,出现以下错误:
An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "page_slug" as such route does not exist.") in "SonataAdminBundle:CRUD:list.html.twig".
如果我从数据库中删除用户,只有一个用户,那么我可以访问用户列表。
我完全不知道如何进一步解决这个问题......
编辑 1:
感谢 Marko Jurinčič,我发现我的配置中有这些行
sonata_user:
impersonating:
route: page_slug
parameters: path: /
但是,这看起来不像是一条路线,而且实际上没有任何名为 page_slug 的路线。它应该有一个路由名称“page_slug”吗?
【问题讨论】:
您是否使用新用户登录?权限呢? 不,我的意思是当我在管理页面(使用我的管理员用户)中创建用户时,我无法再访问用户列表了。 【参考方案1】:我也有同样的问题。我所做的是在我的项目中搜索page_slug,我发现在我的sonata_user下的config.yml中使用了page_slug
impersonating:
route: page_slug
parameters: path: /
我仍然需要看看这是否会影响其他东西(我是 Symfony 的新手,所以我不能 100% 确定这不会在其他地方使用 :))
评论(或只是删除)这解决了我的问题,现在我可以在管理仪表板中看到用户列表。
希望对你有帮助。
编辑: 我找到了答案。在此链接中解释了模拟的含义: https://github.com/sonata-project/SonataUserBundle/issues/174
【讨论】:
感谢您的更新。但是,它已经没有评论了。我的配置中有这个:模拟:路由:page_slug参数:路径:/但它仍然说我没有路由名称page_slug。 我的错,你必须评论或删除它。【参考方案2】:我在一个网站上看到了一个方法 (http://www.laurent-masforne.com/memo/surcharger-sonatauserbundle-notamment-useradmin/) 并评论了这些行:
/*if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH'))
$listMapper
->add('impersonating', 'string', array('template' => 'SonataUserBundle:Admin:Field/impersonating.html.twig'))
;
*/
在vendor\sonata-project\user-bundle\Sonata\UserBundle\Admin\Model\ApplicationUserAdmin
解决了这个问题。但是,我不知道这样做的影响......
【讨论】:
【参考方案3】:删除损坏的配置
如果你不使用模拟,你应该从配置中删除行:
impersonating:
route: page_slug
parameters: path: /
配置模拟
(愿谷歌流浪者能找到)
否则需要配置模拟:
1.用户需要有ROLE_ALLOWED_TO_SWITCH
角色。我将管理员配置为具有此角色:
# app/config/security.yml
security:
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_ALLOWED_TO_SWITCH]
2。允许用户在防火墙中切换:
# app/config/security.yml
firewalls:
main:
switch_user: true
3。 (如果你想要 Sonata Admin 用户列表中的链接)设置 SonataUserBundle - 将my_home_route
替换为单击链接切换用户后要打开的路由名称:
# app/config/config.yml
sonata_user:
impersonating:
route: my_home_route
手动用户切换
手动切换用户添加字符串到 url 结尾:?_switch_user=username
。将username
更改为真实用户名。
【讨论】:
这太有趣了!如果我做对了,模仿意味着扮演另一个角色。因此,我假设 ROLE_ADMIN 可能会冒充 ROLE_USER,因为 ROLE_USER 的权限比 ROLE_ADMIN 少,但这不会反过来吗? 冒充意味着充当另一个用户。您将从您模拟的用户那里获得所有权限。 我的意思是希望权限较低的用户 (ROLE_USER) 不能冒充具有较高权限的用户 (ROLE_ADMIN) 其实ROLE_USER可以冒充ROLE_ADMIN。刚试了一下。将 ROLE_ALLOWED_TO_SWITCH 添加到 ROLE_USER,以非特权用户登录,模拟管理员,获得所有特权,甚至删除了我最初登录时使用的同一用户:D以上是关于创建用户后无法为“page_slug”生成 URL的主要内容,如果未能解决你的问题,请参考以下文章