8

我正在使用 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 的类。有什么解决办法吗?

4

2 回答 2

5

最好的方法是设置一个特定的角色(例如DB_ROLE_CHECK),您在您希望针对您的数据库存储角色进行验证的操作/服务上设置该角色。

然后,您将创建一个安全投票器,它会DB_ROLE_CHECK根据您的数据库条目连接并验证您的请求。

看:

于 2012-10-22T22:19:24.410 回答
3

访问地图建立在这里

如果没有找到 access_control,则什么也不做。

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

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

于 2012-10-22T22:34:46.483 回答