Php 在symfony2中将角色动态分配给路径
我正在尝试使用Symfony2应用程序中的现有用户/组/角色系统实现对某些URL的访问安全性。我正试图找出将其集成到Symfony的访问控制中的最佳方法(或者甚至可能将其装箱并手动管理访问控制) 问题是我有一个url(比如,/example),管理员组中的任何人现在都可以访问它。然后,这些组将为每个组分配更细粒度的角色。比如说,ADMIN组可能有EXAMPLE\u GET、EXAMPLE\u POST角色等等。但是其他组可能只有EXAMPLE\u GET,所以我需要获取用户对象,获取相关组,获取角色,然后确定该用户是否可以使用他们尝试使用的http方法访问URL 最初,我只想手动将组名添加为角色(在symfony安全角色的上下文中),然后在用户对象中使用Php 在symfony2中将角色动态分配给路径,php,security,symfony,acl,Php,Security,Symfony,Acl,我正在尝试使用Symfony2应用程序中的现有用户/组/角色系统实现对某些URL的访问安全性。我正试图找出将其集成到Symfony的访问控制中的最佳方法(或者甚至可能将其装箱并手动管理访问控制) 问题是我有一个url(比如,/example),管理员组中的任何人现在都可以访问它。然后,这些组将为每个组分配更细粒度的角色。比如说,ADMIN组可能有EXAMPLE\u GET、EXAMPLE\u POST角色等等。但是其他组可能只有EXAMPLE\u GET,所以我需要获取用户对象,获取相关组,获取
getRoles()
,检查此人是否有权访问正确的组。然而,事实证明,我拥有的组列表并不是有限的,在任何时候都可以创建更多的组,所以如果可能的话,我需要避免硬编码这些组
有人能建议最好的解决方法吗?或者为我指出关于如何实现这一目标或类似目标的任何文档的方向?关键的一点是,我不能硬编码特定的安全组作为security.yml中的角色,因为人们需要能够创建更多的组,而不必手动将新组名添加到访问控制列表中。听起来像是
VoterInterface
最适合这里:
我不会直接用防火墙(基于路径的方法)来实现这一点
只有通过保护您的资源不受security.yml中的防火墙的攻击,才需要普通用户登录。这将锁定任何未登录的用户
投票者实现将检查所有权限,然后返回是否授予
在控制器方法中,只需检查所需的授权,如下所示:
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>');
}
公共功能显示($id)
{
//获取一个Post实例
$post=。。。;
//请记住,这将调用所有已注册的安全选民
$this->denyaccessunlessgrated('view',$post,'Unauthorized access!');
返回新的响应(''.$post->getName()');
}
谢谢-看来选民路线是最好的选择。ACL对于所需要的东西来说太过苛刻了,而将其进行后移植以支持数百万现有对象将是一场后勤噩梦