在我正在开发的应用程序中,我对安全组件的访问控制存在一个奇怪的问题。
我为用户使用FOSUserBundle(当然),我将示例访问控制规则从捆绑文档复制到我的security.yml
登录屏幕(/login
)完美运行但问题是,所有其他访问控制规则绝对没有任何影响。例如,当用户转到/register
时,他会被重定向到/login
,同样适用于/resetting
。
这是我的security.yml
文件:
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(\_(profiler|wdt)|css|images|js)/
security: false
api:
pattern: ^/api
anonymous: false
form_login: false
provider: fos_userbundle
http_basic:
realm: "REST Service Realm"
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: ~
switch_user: { role: ROLE_SUPER_ADMIN, parameter: _impersonate }
access_control:
- { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/superadmin/, role: ROLE_SUPER_ADMIN }
我已尝试关闭包含/resetting
和/register
的路径的安全性,但由于安全令牌仍需要可用于FOSUserBundle控制器,因此显然无效。
非常感谢任何帮助!
答案 0 :(得分:0)
可能与access_control的顺序有关,尝试将superadmin置于其他位置之上。您似乎也没有secure_area部分(如Symfony2 access control redirects to login中的此示例)
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
答案 1 :(得分:0)
问题在于,如果用户是否已登录,则另一个捆绑包会弄乱每个请求。如果用户未登录,则会为登录页面生成重定向响应。
不知道为什么会这样做,我认为它来自一个原始作者对Symfony经验不足的时代。
但是再次证明,总是检查日志。非常彻底。