如何在数据库中存储Symfony2“access_control”信息?

时间:2012-10-22 22:09:11

标签: php symfony

我正在使用Symfony2,我的用户和角色已存储在我的数据库中。如果我在security.yml中设置如下所示的内容,则效果很好:

access_control:
   - { path: ^/admin, role: ROLE_ADMIN}
   - { path: ^/users, role: ROLE_MANAGER}

但我想将此access_control信息存储在数据库中,因此我系统中的用户可以使用管理界面更改权限本身。

我查看了ACL和FOSUserBundle但无法找到解决方案。我发现我可以使用类似if ($user->hasRole($role))的内容来检查权限,但我需要在每个控制器中执行此操作。

有没有办法定义动态“access_control”功能?也许就像将access_control重定向到某个可能返回true或false的类。 任何解决方案?

2 个答案:

答案 0 :(得分:5)

最好的方法是设置您要针对数据库存储角色验证的操作/服务上设置的特定角色(例如DB_ROLE_CHECK

然后,您将创建一个挂钩到DB_ROLE_CHECK的安全投票人,并根据您的数据库条目验证您的请求。

请参阅:

答案 1 :(得分:3)

构建了访问地图here

如果未找到access_control,则不执行任何操作。

现在,定义您自己的AccessMapInterface实施,并用您的班级覆盖参数security.access_map.class

您可能需要工厂来构建AccessMap。