Sulu权限认证问题:受限页面可通过URL访问未返回403或跳转登录页
解决Sulu受限页面可通过直接URL访问的问题
先确认页面权限的后台配置
- 得在Sulu后台给目标页面设置正确的权限规则:进入页面编辑页,切到「权限」标签,给对应的用户组禁用「查看」权限,只放开给有权限的组。
检查路由层面的安全拦截
光开webspace的<security permission-check="true">还不够,得确保页面的路由/控制器实际做了权限校验:
- 要是用Sulu默认的页面控制器,确认
Sulu\Bundle\WebsiteBundle\Controller\WebsiteController已经启用了权限校验;如果是自定义控制器,得手动加校验逻辑,示例代码:
use Sulu\Bundle\SecurityBundle\Security\Authorization\AccessControl\AccessControlManager; use Symfony\Component\Security\Core\Exception\AccessDeniedException; public function indexAction(Request $request, AccessControlManager $accessControlManager) { $webspaceKey = $request->attributes->get('_sulu')->getAttribute('webspaceKey'); $page = $request->attributes->get('content'); // 校验当前用户有没有页面查看权限 if (!$accessControlManager->hasPermission($page, 'view', $webspaceKey)) { throw new AccessDeniedException(); // 抛出异常后,框架会返回403或按配置跳转 } // 原有页面渲染逻辑 return $this->render(...); }
- 要是用Sulu的CMF路由配置,得在
config/packages/sulu_website.yaml里确认开启了页面权限校验:
sulu_website: security: permission_check: true
验证缓存是否干扰权限校验
按指南配置用户上下文缓存后,得清一下缓存避免旧内容影响:
- 执行命令清缓存:开发环境用
bin/console cache:clear,生产环境加--env=prod参数 - 确保页面缓存是基于用户权限上下文生成的,别让未授权用户拿到缓存的授权页面
配置未授权后的跳转/响应
要是想让未授权用户跳登录页而不是返回403,在config/packages/security.yaml的防火墙配置里加access_denied_url:
security: firewalls: website: # 其他防火墙配置项 access_denied_url: /login # 改成你的登录页面路径
内容的提问来源于stack exchange,提问作者Waldo
相关产品推荐
相关产品推荐

