使用 Symfony2 ,我正在寻找一种方法,可以在任何控制器之外轻松访问给定请求的主路由前缀:
我试图找出处理与Symfony2中某些数据库元素相关的访问控制的最佳方法。
我想根据数据库中存储的/application/APP_ID
限制对路径Subscription
中某些“应用程序”的访问。
每个受限制的资源都将在这条道路上。
订阅引用了User实体和Application实体。它包括结束日期。在此结束日期之后,应该不再可以访问该应用程序。
限制应该是:对于以/application/APP_ID
开头的每个资源,我需要检查是否应该访问控制器。
此前缀是静态的,实际上在app / config / routing.yml中定义为“前缀”,相应的路由名称存储在其中一个Application实体属性中。其他涉及的路由在独立的routing.yml文件中定义,例如位于MyAppBundle/Resources/config/routing.yml
中并导入主路由文件中。
我是否可以轻松了解所请求的当前路由(例如/ application / APP_ID / action / 1)是否包含在定义前缀的路由(例如/ application / APP_ID)中,以便了解哪些应用程序有关?< / p>
或者,有没有办法做到这一点,而无需提供路线或路径列表,这些路线或路径必须要求对添加的每个应用程序进行修改,路由添加或修改?
答案 0 :(得分:1)
你有没有尝试开发自己的选民?如下所述:http://symfony.com/doc/current/cookbook/security/voters.html。
您可以测试$ request-&gt; getRequestUri,而不是测试$ request-&gt; getClientIp。你可以使用$ this-&gt; container-&gt; get('doctrine')访问教义。我想你可以拥有确保自己的道路所需的所有信息。
我几天前就把它自己的RoleHierachy存储在数据库中,效果很好。