php - 如何拒绝登录用户访问路由?
问题描述
我想直接在 security.yaml 的 access_controls 中拒绝登录用户对注册/登录路由的访问
任何人都知道如何在文档中做到这一点?我没有看到那样的东西。
当前访问控制:
access_control:
- { path: ^/signin$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/signup$, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- { path: ^/product$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
解决方案
只有当用户在您的 security.yaml 中没有角色 ROLE_USER 时,您才能添加 access_control :
- { path: ^/sign(up|in), allow_if: "not has_role('ROLE_USER')" }
您必须添加任何 access_denied_url
access_denied_url: /access-denied
并添加一个带有路由 /access-denied 的控制器操作,如果未登录,则将用户重定向到路由登录,如果登录则重定向到分析页面:
/**
* @Route("/access-denied", name="app_access_denied")
*/
public function accessDenied()
{
if ( $this->getUser() ) {
return $this->redirectToRoute('app_user_home');
}
return $this->redirectToRoute('app_login');
}
推荐阅读
- ios - 如何使用代码使 UIScrollView 的设计和外观与我们 iPhone 5s 、 6 6s 、...... 8plus 、 iPhonx 等所有 iPhone 版本相同
- c# - 使用 C# 在 XML 中添加限定名称空间
- java - 在 Java 中使用证书进行 HTTPS 请求
- angular - 在角度 5 中选择默认选项
- javascript - 为什么 vuejs 数组即使不是也显示为空?
- wpf - 如何使用 MVVM 绑定键盘删除键
- angular - 在 chart.js 中为每个标签设置特定颜色
- asp.net - 是否需要回收应用程序池才能刷新缓存的查询计划?
- javascript - 使用 VBA 搜索网站
- python-3.x - 在其他系统中运行的基于 Python 的转换后的 exe