SonataUser - 限制可选组

时间:2013-07-16 15:15:31

标签: symfony sonata-admin

这似乎是一个基本需求,但无法找到有关该主题的任何资源。

在“用户管理”表单中,我需要根据当前用户的角色过滤可选择的组。

假设我们应该只能选择我们被授予所有附加角色的组。

我认为这里不需要ACL。

我可以使用选民吗? 在我看来,这似乎是一个共同的需求,有人可以指向我任何资源吗?

1 个答案:

答案 0 :(得分:0)

正如我可以看到疯狂地急于回答我的问题,我将给予我谦卑的贡献。

我无法使用ACL或选民。

所以我做了一个扩展choice

的自定义类型

此类型从注入了security.contextdoctrine的服务中检索组。

此服务具有收集具有此小算法的组的功能:

public function allExistingGroups()
{
    $finalGroupsList = array();

    /* Get all existing groups */
    $groups = $this->doctrine->getRepository('SonataUserBundle:Group')
                             ->findAll();

    foreach ($groups as $group) {
        $isGranted = true;
        foreach ($group->getRoles() as $role) {
            if (!$this->securityContext->isGranted($role)) {
                $isGranted = false;
            }
        }
        /* User is granted, so he can see the group */
        if ($isGranted) {
            $finalGroupsList[$group->getId()] = $group->getName();
        }
    }

    return $finalGroupsList;
}

用户现在只会看到他被授予所有角色的组。

当然,应该有一个更漂亮的解决方案,但这对我有用。