[英]Assigning roles to paths dynamically in symfony2
我正在尝试使用Symfony2应用程序中的现有用户/组/角色系统对某些URL实施访问安全性。 我正在尝试找出将其集成到Symfony的access_control中的最佳方法(甚至可能将其装箱并手动管理访问控制)。
问题是我有一个URL(例如,/ example),现在ADMIN组中的任何人都可以访问。 然后,这些组将分配给每个组更精细的角色。 因此,例如,ADMIN组可能具有EXAMPLE_GET,EXAMPLE_POST角色等。但是其他组可能仅具有EXAMPLE_GET,因此我需要获取User对象,获取关联的组,获取角色,然后确定该用户是否可以使用他们尝试使用的http方法访问URL。
最初,我只是想手动将组名添加为角色(在symfony安全角色的上下文中),然后在用户对象中使用getRoles()
来检查该人是否有权访问正确的组来访问它。 但是,事实证明,我拥有的组列表不是有限的,可以在任何时候创建更多的组,因此,如果可能的话,我需要避免对这些组进行硬编码。
谁能建议最好的方法? 还是让我指向有关如何实现此目标或类似目标的任何文档的方向? 关键是我不能将特定的安全组硬编码为security.yml中的角色,因为人们需要能够创建更多组,而不必手动将新组名添加到access_control列表中。
听起来好像VoterInterface
最适合这里: http ://symfony.com/doc/current/cookbook/security/voters.html
我不会尝试直接使用防火墙(基于路径的方法)执行此操作
仅通过使用security.yml中的防火墙保护您的资源免受IS_AUTHENTICATED_FULLY授予,才能要求通用用户登录。 这将锁定任何未登录的用户。
投票者实现将检查所有权限,然后返回是否授予权限。
在您的控制器方法中,只需检查所需的授予,如下所示:
public function showAction($id)
{
// get a Post instance
$post = ...;
// keep in mind that this will call all registered security voters
$this->denyAccessUnlessGranted('view', $post, 'Unauthorized access!');
return new Response('<h1>'.$post->getName().'</h1>');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.