实时调试 Symfony 3.4 - 403 页面,可能存在用户角色问题
Debugging Symfony 3.4 live - 403 page, possible User Roles issue
我在使用用户角色登录时单击 link 进入 /admin/stats 页面时出现 403 错误:ROLE_EXPL应该可以访问该页面。它适用于 ROLE_ADMIN,它也可以访问此页面。
查看代码,存在三个用户角色,link 问题页面 /admin/stats 未显示在菜单上用户角色 ROLE_PASS 但适用于其他人。但是,此 link 为 ROLE_EXPL 提供 403 错误,但对 ROLE_ADMIN
工作正常
有人可以建议从哪里开始调试吗?
代码:
security.yaml
security:
encoders:
AppBundle\Entity\Pass:
algorithm: bcrypt
providers:
pass_provider:
entity:
class: AppBundle:Pass
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
provider: pass_provider
switch_user: true
form_login:
login_path: login
check_path: login
default_target_path: /home
always_use_default_target_path: true
logout:
path: /logout
target: /login
logout_on_user_change: true
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /home
role_hierarchy:
ROLE_PASS: ROLE_USER
ROLE_EXPL: ROLE_USER
ROLE_ADMIN: ROLE_USER
access_control:
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
要求的结果:
ROLE_EXPL 应该可以访问页面 /admin/stats
如果具有角色 ROLE_EXPL
的任何用户应该有权访问 /admin/stats
,您需要更改 access_control
设置。目前它说:
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
...这意味着:只有角色为 ROLE_ADMIN
的用户才能访问以 /admin
开头的路径
我需要在 security.yaml 文件中为 /admin/stats[=26 添加额外的行或“安全模式” =] URL.
正如 Nico 所指出的,只有角色为 ROLE_ADMIN 的用户才能访问以 /admin
开头的路径
因此,我在 ^/admin 路径下方添加了以下行,但这没有用。我将它移到该路径上方并且它起作用但随后破坏了其他用户的页面,因此安全模式的顺序非常重要
{ path: ^/admin/stats, roles: ROLE_EXPL, requires_channel: '%https%' }
我发现您可以添加多个角色,这很有效:
access_control:
- { path: ^/admin/stats, roles: [ROLE_EXPL,ROLE_ADMIN], requires_channel: '%https%' }
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
我在使用用户角色登录时单击 link 进入 /admin/stats 页面时出现 403 错误:ROLE_EXPL应该可以访问该页面。它适用于 ROLE_ADMIN,它也可以访问此页面。
查看代码,存在三个用户角色,link 问题页面 /admin/stats 未显示在菜单上用户角色 ROLE_PASS 但适用于其他人。但是,此 link 为 ROLE_EXPL 提供 403 错误,但对 ROLE_ADMIN
工作正常有人可以建议从哪里开始调试吗?
代码: security.yaml
security:
encoders:
AppBundle\Entity\Pass:
algorithm: bcrypt
providers:
pass_provider:
entity:
class: AppBundle:Pass
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
provider: pass_provider
switch_user: true
form_login:
login_path: login
check_path: login
default_target_path: /home
always_use_default_target_path: true
logout:
path: /logout
target: /login
logout_on_user_change: true
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /home
role_hierarchy:
ROLE_PASS: ROLE_USER
ROLE_EXPL: ROLE_USER
ROLE_ADMIN: ROLE_USER
access_control:
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
要求的结果:
ROLE_EXPL 应该可以访问页面 /admin/stats
如果具有角色 ROLE_EXPL
的任何用户应该有权访问 /admin/stats
,您需要更改 access_control
设置。目前它说:
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
...这意味着:只有角色为 ROLE_ADMIN
的用户才能访问以 /admin
我需要在 security.yaml 文件中为 /admin/stats[=26 添加额外的行或“安全模式” =] URL.
正如 Nico 所指出的,只有角色为 ROLE_ADMIN 的用户才能访问以 /admin
开头的路径因此,我在 ^/admin 路径下方添加了以下行,但这没有用。我将它移到该路径上方并且它起作用但随后破坏了其他用户的页面,因此安全模式的顺序非常重要
{ path: ^/admin/stats, roles: ROLE_EXPL, requires_channel: '%https%' }
我发现您可以添加多个角色,这很有效:
access_control:
- { path: ^/admin/stats, roles: [ROLE_EXPL,ROLE_ADMIN], requires_channel: '%https%' }
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
- { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }