我正在使用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的类。 任何解决方案?
答案 0 :(得分:5)
最好的方法是设置您要针对数据库存储角色验证的操作/服务上设置的特定角色(例如DB_ROLE_CHECK
。
然后,您将创建一个挂钩到DB_ROLE_CHECK
的安全投票人,并根据您的数据库条目验证您的请求。
请参阅:
答案 1 :(得分:3)
构建了访问地图here。
如果未找到access_control,则不执行任何操作。
现在,定义您自己的AccessMapInterface实施,并用您的班级覆盖参数security.access_map.class。
您可能需要工厂来构建AccessMap。