繁体   English   中英

在symfony2中为路径动态分配角色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM