Symfony 使用访问控制返回被拒绝的访问
我在我的Symfony 使用访问控制返回被拒绝的访问,symfony,security,symfony4,access-control,Symfony,Security,Symfony4,Access Control,我在我的安全性中使用Symfony 4.1.7。yaml具有以下访问控制: access_control: # master: - { path: ^/master, roles: ROLE_MASTER } # manager: - { path: ^/.*/manager, roles: ROLE_MANAGER } # main: - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 当我打
安全性中使用Symfony 4.1.7。yaml
具有以下访问控制:
access_control:
# master:
- { path: ^/master, roles: ROLE_MASTER }
# manager:
- { path: ^/.*/manager, roles: ROLE_MANAGER }
# main:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
当我打开第二个url(/foo/manager)
且未经授权时,我将重定向到登录路径,我需要返回访问权限denaid not redirect to login。
我的最后一个目标是为append角色调用事件监听器,以便从事件监听器授权用户
更新:
这是我的安全防火墙部分:
main:
pattern: ^/
user_checker: App\Security\Checker\UserChecker
anonymous: ~
provider: default
context: primary
simple_form:
authenticator: App\Security\Authenticator\UserAuthenticator
check_path: login
login_path: login
username_parameter: phone
password_parameter: password
use_referer: true
logout:
path: logout
remember_me:
secret: '%kernel.secret%'
lifetime: 604800
path: /
remember_me_parameter: remember_me
您必须允许用户访问此路径,并使用控制器检查用户角色
$this->denyAccessUnlessGranted('ROLE_MANAGER ', null, 'Unable to access this page!');
或
取决于您要执行的操作。您需要在security.yml中配置登录路径 例如:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
in_memory: { memory: ~ }
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: .*
context: user
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
抱歉@A.Seddighi误解了您的问题,已编辑。如果我这样做,我需要将其写入所有控制器,我认为这不是一个好方法,这是正确的方法@A.Seddighi<
security.yml
中的code>access\u control可帮助您设置全局规则,并根据角色阻止对某些路径的访问。如果你真的想要你需要的,你需要自己去做。Symfony很方便,但它不是魔法……;)我有登录路径。我正在更新并添加防火墙代码我需要拒绝访问而不是重定向到loginTry添加use\u forward
参数,就像我的示例一样。它解决了我的问题。真的改变了我的生活。谢谢你,Eze。@EZEQUEELESNAOLA不工作我添加了在用户更改时注销
并实现了EquatableInterface
,但是在用户更改时注销
防火墙选项不受欢迎,将在5.0中删除。@EZEQUEELESNAOLA问题解决了我被删除了在用户更改时注销
,它只起作用使用equalTableInterface
,tnx提供帮助。
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
in_memory: { memory: ~ }
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: .*
context: user
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null