之前我们让匿名用户可以进入每一个页面,这一次我们要尝试authorization(授权)并开始拒绝进入。
再来看看Security.yml。拒绝访问最简单的方式就是通过ACCESS_CONTROL部分。我们可以使用正则表达式去保护任何URL,现在我们开始保护 /new和/create;
当你登录会给你一个角色,如果你没有登录,你就没有这些。在这里,你最少需要ROLE_USER角色才能访问。
1 2 3 4 5 6 |
# app/config/security.yml security: # ... access_control: - { path: ^/new, roles: ROLE_USER } - { path: ^/create, roles: ROLE_USER } |
试试吧!当我们尝试访问这两个地址,会被重定向到/my-login-url.我终于知道这个URL是干什么的了!login_path键的杰作。
刚才的神奇事情,发生在幕后:
我们尝试访问 /new。由于我们是匿名用户,不存在角色,这个access controls把匿名用户踢了出去;
它不是给我们一个访问被拒绝的页面,而是你可以决定让它有登录的机会。form_login键告诉防火墙我们要使用一个传统的登录表单,并告诉表单的路径为 /my-login-url.
因为我们没有登录页面,所以看到了一个404错误页。
更多的access_control配置
access_control有很多的技巧,你可以查看第十三章:安全security找到access_control部分。
还有一些其他的技巧,如你可以根据用户的ip或者是根据主机名来控制访问用户。你甚至可以让用户重定向到https。