今天我注意到无论我是否经过身份验证,我都可以随时访问注册表并重置表单。
这是我的security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout:
delete_cookies:
activeGame: {}
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
关于http://symfony.com/doc/current/cookbook/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources似乎"正常"能够访问这些页面。
但我怎样才能轻松"为经过身份验证的用户禁用它还是我错过了什么?
提前致谢!
答案 0 :(得分:3)
您可以通过使用新引入的访问控制的allow_if表达式来完成您要查找的内容。
- { path: ^/register, allow_if: "not is_authenticated()" }
另一种方式可能是:
- { path: ^/register, allow_if: "user == 'anon'" }
我还没有对此进行全面测试,但它应该只允许完全未经过身份验证或经过身份验证的用户访问该路径
以下是security
的一些内容Here are some of the variable and functions available in expressions
然后,您可以在allow_if
但是,如果登录用户尝试访问这些页面,则不希望抛出403拒绝访问异常。相反,您希望将它们重定向到其他位置,然后您可以将检查添加到各自的控制器操作中。类似的东西:
public function registerAction()
{
if (true === $this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
return $this->redirect($this->generateUrl('some_route_to_send_them_to'));
}
// ...
}