access_control 无效
access_control doesn't work
我想用 access_control 保护路由 /admin 但不起作用,我总是可以不登录就进入。
编辑
这是admin的路由:
admin_homepage:
resource: "@AppBundle/Resources/config/admin/index.yml"
prefix: /{_locale}/admin
如果我从 access_control 工作的路线中删除 {_locale},我该如何解决这个问题?
这是Security.yml
role_hierarchy:
ROLE_ADMIN: [ROLE_AUTEUR, ROLE_MODERATEUR]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: frontend_index
csrf_provider: form.csrf_provider
logout:
path: fos_user_security_logout
target: frontend_index
remember_me:
key: %secret%
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
改变
access_control:
[...]
- { path: ^/admin, roles: ROLE_ADMIN }
至
access_control:
[...]
- { path: ^/.*/admin, roles: ROLE_ADMIN }
(喜欢的话也可以用这个)
access_contol:
[...]
- { path: ^/[a-z]{2}/admin, roles: ROLE_ADMIN }
原因是安全控制是用正则表达式执行的,所以如果你之前没有指定任何前缀"admin",控制将失败,任何人都可以登录。
我的解决方案的第一个版本,将匹配 admin 之前的任何前缀。对于第二个,只有在 a 和 z 之间恰好有两个字母(小写)的前缀才会匹配(因此,每个语言环境)
我想用 access_control 保护路由 /admin 但不起作用,我总是可以不登录就进入。
编辑
这是admin的路由:
admin_homepage:
resource: "@AppBundle/Resources/config/admin/index.yml"
prefix: /{_locale}/admin
如果我从 access_control 工作的路线中删除 {_locale},我该如何解决这个问题? 这是Security.yml
role_hierarchy:
ROLE_ADMIN: [ROLE_AUTEUR, ROLE_MODERATEUR]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: frontend_index
csrf_provider: form.csrf_provider
logout:
path: fos_user_security_logout
target: frontend_index
remember_me:
key: %secret%
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
改变
access_control:
[...]
- { path: ^/admin, roles: ROLE_ADMIN }
至
access_control:
[...]
- { path: ^/.*/admin, roles: ROLE_ADMIN }
(喜欢的话也可以用这个)
access_contol:
[...]
- { path: ^/[a-z]{2}/admin, roles: ROLE_ADMIN }
原因是安全控制是用正则表达式执行的,所以如果你之前没有指定任何前缀"admin",控制将失败,任何人都可以登录。
我的解决方案的第一个版本,将匹配 admin 之前的任何前缀。对于第二个,只有在 a 和 z 之间恰好有两个字母(小写)的前缀才会匹配(因此,每个语言环境)