小编Ale*_*ski的帖子

如何根据特定用户的权限(例如编辑)使用ACL过滤域对象列表?

在Web应用程序中使用Symfony2中的ACL实现时,我们遇到了一个用例,其中建议的使用ACL的方法(检查单个域对象的用户权限)变得不可行.因此,我们想知道是否存在可用于解决问题的ACL API的某些部分.

用例位于控制器中,该控制器准备要在模板中呈现的域对象列表,以便用户可以选择她想要编辑的对象.用户无权编辑数据库中的所有对象,因此必须相应地过滤列表.

这可以(根据其他解决方案)根据两种策略完成:

1)一个查询过滤器,它使用当前用户的ACL为对象(或多个对象)附加有效对象id的给定查询.即:

WHERE <other conditions> AND u.id IN(<list of legal object ids here>)
Run Code Online (Sandbox Code Playgroud)

2)一个查询后过滤器,用于删除用户在从数据库中检索完整列表后没有正确权限的对象.即:

$objs   = <query for objects>
$objIds = <getting all the permitted obj ids from the ACL>
for ($obj in $objs) {
    if (in_array($obj.id, $objIds) { $result[] = $obj; } 
}
return $result;
Run Code Online (Sandbox Code Playgroud)

第一种策略是可取的,因为数据库正在进行所有过滤工作,并且都需要两次数据库查询.一个用于ACL,一个用于实际查询,但这可能是不可避免的.

在Symfony2中是否有任何一种策略(或实现预期结果)的实现?

php permissions acl domain-object symfony

32
推荐指数
2
解决办法
8306
查看次数

如何识别用户是否在Symfony2中被模拟?

在使用Symfony2构建的应用程序中,我们希望superadmins能够模仿其他用户.通过为superadmin用户提供ROLE_ALLOWED_TO_SWITCH角色,可以轻松完成此操作.通过调用"somewhere?_switch_user ="来实现切换,如参考文档中所述.

然而,问题是在模板中检测当前用户是否实际被模拟,以便在页面上打印到"某处?_switch_user = _exit"的链接,从而使模仿用户能够返回到她的真实用户.

impersonation symfony

22
推荐指数
2
解决办法
6399
查看次数

Symfony2:如何查找对某个域对象具有权限的用户?

在我们基于Symfony2的应用程序中,我们想要创建一个列表,列出系统中哪些用户对给定的域对象具有权限.我们正在使用ACL,我们的直接本能是查看从相关域对象的ACLProvider返回的ACL对象,以查找可以返回具有权限的用户(或至少是SecurityIdentities)的方法,但我找不到这样的方法.

我们确信此功能可通过API获得,但我们无法找到隐藏这些方法的位置.

编辑另一种方法是直接在acl-tables中查找这些连接并找出那种方式,但它不是很漂亮,我们可能会重新发明轮子.

permissions acl domain-object symfony

15
推荐指数
1
解决办法
1228
查看次数

标签 统计

symfony ×3

acl ×2

domain-object ×2

permissions ×2

impersonation ×1

php ×1