- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在向一些 Symfony 类添加自定义逻辑时遇到了问题。
切换用户监听器
我想添加一个检查,即用户不能切换到比初始用户拥有更多权限/角色的另一个用户。
第一次尝试
覆盖security_listeners.xml
中的参数用 key :
security.authentication.switchuser_listener.class 但是我在哪里可以覆盖它?
在 security.yml 中它不起作用:
security:
...
authentication:
switchuser_listener:
class: Symfony\Component\Security\Http\Firewall\SwitchUserListener
$switchEvent = new SwitchUserEvent($request, $token->getUser());
$this->dispatcher->dispatch(SecurityEvents::SWITCH_USER, $switchEvent);
<tag name="kernel.event_listener" event="security.switch_user" method="onSecuritySwitchUser" />
ignore if path containts '?switch_user=_exit'
但是路径(URL参数)可以改变:
# app/config/security.yml
security:
firewalls:
main:
# ...
switch_user: { role: ROLE_ADMIN, parameter: _want_to_be_this_user }
service container
.它将被传递给
的构造函数SwitchUserListner 类并将作为私有(private)属性保存在那里,永远无法从外部访问(没有反射)。 (发生在这里:
SecurityExtension.php
第 591 行)那该怎么办?定义参数两次反对 DRY。使用反射?
TemplateGuesser
:对于特定的捆绑包,所有具有注释
的模板@Tempalte 模板文件应位于 Controller
TestController#showAction
在这条路上:
Resources/views/customDir/Test/show.html.twig
render
时具有特定模板的函数,猜测者应该忽略注释。
SwitchUserListener
相比这一次我的类(class)真的被称为而不是原来的猜测者。为什么它在这里有效,但不适用于
SwitchUserListener
?
Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener
但这没有用。
最佳答案
每当您需要添加自定义逻辑或扩展框架行为时,您都可以使用和滥用 container配置。这意味着您可以覆盖几乎所有 Symfony 定义的服务,只需创建一个扩展该服务的新类——或者不是,真的——并使用与您想要扩展或更改行为的原始服务相同的键为其创建服务定义。
例如,Symfony 有一个基础 template guesser使用 sensio_framework_extra.view.guesser
注册为服务ID。如果你想扩展它或改变行为,你只需要创建你自己的类并使用原始服务的相同 id 注册它 - 请记住,捆绑加载顺序会影响具有相同 id 的服务定义,其中最后一个加载是将被创建的那个。
那应该可以解决您的两个问题。
关于symfony - 将自定义逻辑添加到内部 Symfony 类,如 SwitchUserListener 或 TemplateGuesser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192294/
我在向一些 Symfony 类添加自定义逻辑时遇到了问题。 切换用户监听器 我想添加一个检查,即用户不能切换到比初始用户拥有更多权限/角色的另一个用户。 第一次尝试 覆盖security_listen
我是一名优秀的程序员,十分优秀!