我目前正在研究Symfony中的Web应用程序。该应用程序涉及许多客户,他们都有自己的帐户登录。对于用户管理,我使用了Symfony User Bundle之友,我非常满意。
在应用程序中,管理员需要查看属于所有客户端的信息,客户端需要被限制为只能看到自己的信息。
此时,FOS将“用户”角色分配给我注册的所有帐户。我曾考虑过只允许客户使用类似的查询访问属于他的信息;
$query = $this->getEntityManager()
->createQuery(
'SELECT c FROM clientsBundle:client c
WHERE c.name LIKE :string'
)->setParameter('string', '%'.$string.'%');
然后给var clientID提供客户端id的值,然后根据该值(id)获取所需的所有信息。
但说实话,我并不认为这是最好的做法。
我想知道是否有一个(更简单的)选项,不仅允许用户通过Symfony中的security.yml访问某些页面,而且还使该页面中的内容特定于用户。
非常感谢任何帮助。
答案 0 :(得分:2)
我们目前正在开发一个大型网络应用程序,用于保存用户的会计信息。所以类似的事情,你只希望你的用户有权访问他们自己的数据。
我们只是编写了一些verifyAccessTo
方法,通过为该实体分配关系来检查他们尝试访问的实体是否属于他们的组织(在我们的案例中是学校)。
它可能看起来像这样。
public function verifyAccessToTag( School $school, Tag $entry ) {
return $entry->getSchool()->getId() == $school->getId();
}
然后,当我们列出数据时,我们会专门查询与该学校相关的实体。
如果您的网站的特定区域需要特定访问权限,例如管理区域,那么在防火墙中就可以进行访问(security.yml
)。
如果您需要筛选和限制数据,那么查询和验证特定数据访问权的方式可能是唯一的方法。
整个安全世界是一个巨大的安全世界,但有一些资源可能有所帮助。
securing services< - 这对排名系统非常有用
希望有所帮助。
答案 1 :(得分:0)
您可以获取用户的ID并使用:
$user = $this->container->get('security.context')->getToken()->getUser();
$user->getId();