获取除Symfony2中当前登录用户之外的其他用户的ACL?

Hug*_*ois 5 acl symfony symfony-2.1

我正在使用Symfony2构建一个Web应用程序.我一直在实施ACL模块,它工作得很好,但在尝试制作一个管理权限的pannel时偶然发现了一个问题.

所以我得到了用户,可以创建一个项目并在他的项目中添加"参与者".参与者可以有哪些是从掩膜制造商面具三种不同的接入类型MASK_VIEW,MASK_EDIT,MASK_OPERATOR.使用ProblematicAclManagerBundle我们可以使用这样做轻松添加对这些的访问:

$this->aclManager->addObjectPermission($project, $mask, $user);
Run Code Online (Sandbox Code Playgroud)

问题是,当您想要编辑项目时,您必须能够列出具有当前访问权限的用户.该功能isGranted可以让您为当前登录用户提供权限,但不能为其他用户提供.与addXXXX有三个参数的函数相比,isGranted只有两个,即安全对象和掩码.因此,您无法找到具有此功能的其他用户的权利.


是否有某种方式来获取其他用户内置的权利?或者我是否必须构建自己的SQL查询以从acl表中提取数据?

Hug*_*ois 1

这就是我现在所拥有的...我使用嵌套选择进行了原始 sql 查询。

//...
$objectClass = get_class($object);
$objectId = $object->getId();
$userSecurityIdentity = get_class($user) . '-' . $user->getUsername();

$sql = "SELECT `mask` FROM `acl_entries`" .
        "WHERE `object_identity_id` in (" .
            "SELECT `id` FROM `acl_object_identities` " .
            "WHERE `object_identifier` = :objectId AND `class_id` in (" .
                "SELECT `id` FROM `acl_classes` WHERE `class_type` = :objectClass" .
            ")" .
        ")" .
        "AND `security_identity_id` in (" .
            "SELECT `id` FROM `acl_security_identities`" .
            "WHERE `identifier` = :userSecurityIdentity" .
        ");";

$query = $this->entityManager->getConnection()->executeQuery($sql, array(
    'objectId'             => $objectId,
    'objectClass'          => $objectClass,
    'userSecurityIdentity' => $userSecurityIdentity)
);

$data = $query->fetch();
$mask = $data['mask'];
// ...
Run Code Online (Sandbox Code Playgroud)

该解决方案有效,但对我来说不是最好的解决方案,因为您实际上直接查询表而不是使用 ACL 模块,如果我发现其他内容,我会更新。