Php Symfony2-动态角色管理
我正在开发一个CRM,它将提供高级授权,并管理在系统中具有特定角色的组中的用户 基本上,我想做的是:Php Symfony2-动态角色管理,php,security,symfony,authorization,user-management,Php,Security,Symfony,Authorization,User Management,我正在开发一个CRM,它将提供高级授权,并管理在系统中具有特定角色的组中的用户 基本上,我想做的是: 管理(域)模型/控制器/操作的动态授权 管理对象和字段的动态授权 我知道security.yml文件中的角色_xxxx,但我不想硬编码这些角色 例如,我希望有一种矩阵/网格,超级管理员可以在其中创建自定义授权角色 其中一个角色可以是:“团队领导”可以查看和编辑员工的电子邮件地址,但不能查看或编辑员工工资字段 另一个用例是,用户组“Accounting”中的用户可以调用操作generateIn
- 管理(域)模型/控制器/操作的动态授权
- 管理对象和字段的动态授权
(我记得早期版本的Invision Power Board中有类似的内容,您可以在其中配置权限掩码网格并将其连接到组)根据您在这里所说的内容,我认为应该使用
ACL
但是,您必须自己检查权限,使用以下方式启动每个安全方法:
$securityContext = $this->get('security.context');
$comment = ... // load using Doctrine?
if (false === $securityContext->isGranted('EDIT', $comment))
{
throw new AccessDeniedException();
}
如果您要扩展Symfony的控制器
类,我强烈建议在这两个类之间再添加一个类,它将实现常见的安全逻辑,以尽可能减少可能多的错误
另一方面,在使用服务时,如果可以提供对象作为参数,则可以依赖JMSSecurityExtraBundle
中的@SecureParam
注释(我假设您使用它)来检查相关的域对象权限
希望这有点帮助…我正面临着同样的问题,在多次搜索和引用现有捆绑包(FOSUserBundle、SonataUserBundle)后,我会这样解决它:
$securityContext = $this->get('security.context');
$comment = ... // load using Doctrine?
if (false === $securityContext->isGranted('EDIT', $comment))
{
throw new AccessDeniedException();
}
创建自己的用户实体扩展UserInterface,然后自定义函数getRoles();
1.在这个函数中你可以查询用户属于哪个组,从该组中得到所有角色。有关更多详细信息,请参考FOSUserBundle的用户模型和用户实体文件。
第247行
从symfony 2.4开始,不再需要jms捆绑包@安全将得到支持:)是的,上帝保佑他们!:)编辑:(由于soem原因,我无法按)@Security以避免冲突。