1

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

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

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

我认为这里不需要 ACL。

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

4

1 回答 1

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;
}

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

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

于 2013-08-05T15:45:58.173 回答