【发布时间】:2015-03-12 08:04:18
【问题描述】:
我是 symfony 的新手,我想知道是否有人可以向我解释如何处理登录用户。我有一个类用户,它具有扩展用户的 3 个子类(管理员、编辑器、菜鸟)。这些用户可以登录首页,根据他们的用户类型,他们可以看到各种页面。 例如:有一个“更改密码”页面,可以更改用户的密码。管理员和编辑可以访问所有这些,但菜鸟只能更改自己的密码。所以我让 security.yml 中的路由对所有三个角色都可用:
- { path: ^/user/changepw, roles: [ROLE_ADMIN, ROLE_EDITOR, ROLE_NOOB }
在 changepwAction 中,我现在必须检查用户是否是 Noob,如果是,则当前 UserId 是否是他自己的。我想知道:我该怎么做?我需要在用户只能访问某些 ID 的各种控制器中检查这些内容。我开始时看起来像这样:
$securityContext = $this->container->get('security.context');
$loggedInUser = $securityContext->getToken()->getUser();
//if Noob (ID 3)
if($loggedInUser->getUserGroup()->getId() == 3) { ... }
这对我来说似乎非常不切实际,如果我以后必须添加用户组,我将不得不搜索每个控制器来编辑这些部分。我在想也许我可以创建一些全局可用的函数 checkUserRights($action, $options) 在其中我获取 currentLoggedInUser 并检查 $action (在这种情况下为“changepw”),如果允许用户,可能还有一些附加参数 $options使用此操作。这是一个好主意吗?如果是这样 - 我如何使 checkUserRights 全球可用?
如果不是 - 还能怎么做?我会感谢任何提示。
【问题讨论】:
-
在每个控制器中检查它不是解决方案。作为提示,研究“监听器”,实际上你需要一个身份验证监听器symfony.com/doc/current/components/security/authentication.html
-
您能否详细解释一下我将如何使用身份验证侦听器来解决我的问题?