当我转到project / web /时,应用程序将我重定向到te web / login,其中是一个用于登录的表单。
但是当我获得授权后,在提交表单后我回到了项目/网络/路径,并且Acces拒绝了例外。我的设置出了什么问题,我无法理解。
的routing.yml
my_backend:
resource: "@MyBackendBundle/Controller/"
type: annotation
prefix: /
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
use_forward: false
check_path: /login_check
post_only: true
always_use_default_target_path: false
default_target_path: /
target_path_parameter: _target_path
use_referer: false
failure_path: null
failure_forward: false
username_parameter: _username
password_parameter: _password
csrf_parameter: _csrf_token
intention: authenticate
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: ROLE_ADMIN }
答案 0 :(得分:0)
ROLE_ADMIN
是否与您的用户相关联?
另外,您是否尝试删除anonymous
配置参数或至少将其设置为默认值(“〜”)?如果我理解正确,您的整个应用都需要身份验证,但/login
提供了输入用户凭据的方法。这是对的吗?
答案 1 :(得分:0)
在您进行身份验证后,您将被设置为另一个角色,然后是ROLE_ADMIN。请使用该网站的app_dev.php版本,在您访问拒绝访问权限页面后,它会告诉您您的角色。
答案 2 :(得分:0)
谢谢你们的回答。我解决了这个问题。
在我使用promote --super command
创建和提升用户后,他获得了ROLE_SUPER_ADMIN
个角色。但在我的应用程序的访问控制中,只有path: ^/, role: ROLE_ADMIN
因此我将其修改为ROLE_SUPER_ADMIN
,现在它可以在没有“拒绝访问”的情况下运行。
但在这种情况下我还有一个问题。现在当我使用app.php版本时一切正常(登录/login
页面后我被重定向到/
)但是使用app_dev.php版本,登录后我被重定向到{{1}用空页面。
答案 3 :(得分:0)
设置角色层次结构,以便超级管理员可以访问定义为admin-accessible的所有路由:
# app/config/security.yml
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]