访问/admin,为什么任何登录系统的用户都可以访问?
Access to /admin, why any user logged into the system can access?
我花了几天时间尝试完成这项工作,但我不能,所以作为最后的手段,我希望有人能在这里帮助我。关键是我的应用程序,因为每个应用程序都有一个 frontend
应该被系统中注册的任何用户访问,除了那些到目前为止具有角色 ROLE_ADMIN
和 backend
的用户否则,应该只有具有 ROLE_ADMIN
的用户和不拥有角色或具有默认角色 ROLE_USER 的普通用户应该能够访问。
我遇到的问题是,无论如何,如果我与任何没有管理员权限(缺少 ROLE_ADMIN
)并且无法访问 URL app.php/admin
的普通用户签约,他们可以输入没有任何问题,这是完全错误的。另一方面,如果我尝试使用 ROLE_ADMIN
的任何用户登录 frontend
都可以毫无问题地完成,这不应该发生。
这是我的配置security.yml
:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
default_target_path: home
always_use_default_target_path: true
use_referer: true
logout:
path: fos_user_security_logout
target: /
invalidate_session: true
anonymous: ~
access_control:
# Anonymous area
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/isLoggedIn$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cedula, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/rif, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/usuario, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/razon_social, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro_mercantil, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/padre, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo_alternativo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/paises, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/estados, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ciudades, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/municipios, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/parroquias, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/empresas, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Secured area
- { path: ^/, role: ROLE_USER }
- { path: ^/admin, role: ROLE_ADMIN }
我做错了什么?谁能给我一些建议?
我已经 docs 从上到下阅读了好几遍,但不明白我做错了什么
访问控制的工作原理与路由非常相似,第一个匹配的是执行的。
这意味着对 /admin 的请求将匹配:
- { path: ^/, role: ROLE_USER }
你应该把你的 /admin 规则放在第一位。此外,我发现尽可能保护控制器是更好的做法(这样可以避免此类常见问题):http://symfony.com/doc/current/book/security.html#securing-controllers-and-other-code
我花了几天时间尝试完成这项工作,但我不能,所以作为最后的手段,我希望有人能在这里帮助我。关键是我的应用程序,因为每个应用程序都有一个 frontend
应该被系统中注册的任何用户访问,除了那些到目前为止具有角色 ROLE_ADMIN
和 backend
的用户否则,应该只有具有 ROLE_ADMIN
的用户和不拥有角色或具有默认角色 ROLE_USER 的普通用户应该能够访问。
我遇到的问题是,无论如何,如果我与任何没有管理员权限(缺少 ROLE_ADMIN
)并且无法访问 URL app.php/admin
的普通用户签约,他们可以输入没有任何问题,这是完全错误的。另一方面,如果我尝试使用 ROLE_ADMIN
的任何用户登录 frontend
都可以毫无问题地完成,这不应该发生。
这是我的配置security.yml
:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
default_target_path: home
always_use_default_target_path: true
use_referer: true
logout:
path: fos_user_security_logout
target: /
invalidate_session: true
anonymous: ~
access_control:
# Anonymous area
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/isLoggedIn$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cedula, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/rif, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/usuario, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/razon_social, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registro_mercantil, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/padre, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/correo_alternativo, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/paises, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/estados, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ciudades, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/municipios, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/parroquias, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/empresas, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Secured area
- { path: ^/, role: ROLE_USER }
- { path: ^/admin, role: ROLE_ADMIN }
我做错了什么?谁能给我一些建议?
我已经 docs 从上到下阅读了好几遍,但不明白我做错了什么
访问控制的工作原理与路由非常相似,第一个匹配的是执行的。
这意味着对 /admin 的请求将匹配:
- { path: ^/, role: ROLE_USER }
你应该把你的 /admin 规则放在第一位。此外,我发现尽可能保护控制器是更好的做法(这样可以避免此类常见问题):http://symfony.com/doc/current/book/security.html#securing-controllers-and-other-code