今天我注意到我总是可以访问寄存器和重置表单,无论我是否经过身份验证。
这是我的安全。yml:
security:
encoders:
FOSUserBundleModelUserInterface: 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,能够访问此页面似乎是"正常的"。
但是我如何"轻松"地为认证用户禁用它,或者我错过了什么?
提前感谢!
您可以通过使用新引入的allow_if表达式来实现访问控制。
- { path: ^/register, allow_if: "not is_authenticated()" }
- { path: ^/register, allow_if: "user == 'anon'" }
我还没有完全测试过这个,但它应该只允许没有完全认证或没有被认证的用户访问该路径
这里有一些关于安全性的内容
下面是表达式
中可用的一些变量和函数然后这里是一些信息的表达式,你可以使用在allow_if
但是,如果您不希望在登录用户尝试访问这些页面时抛出403 Access Denied Exception。相反,您希望将它们重定向到其他地方,然后可以向它们各自的控制器动作添加检查。比如:
public function registerAction()
{
if (true === $this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
return $this->redirect($this->generateUrl('some_route_to_send_them_to'));
}
// ...
}