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表中提取数据?
这就是我现在所拥有的...我使用嵌套选择进行了原始 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 模块,如果我发现其他内容,我会更新。
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |