gpt4 book ai didi

php - Symfony 2 Acls insertClassAces

转载 作者:搜寻专家 更新时间:2023-10-31 21:33:03 26 4
gpt4 key购买 nike

我正在使用 Symfony acls,我注意到当第一次创建类 acl 时,还会使用 object_identifier = class 创建 acl_object_identities

但是如果你插入一个 ace 类,(acl_entries),object_identity_id 被设置为 NULL。我想知道为什么以前创建的 acl_object_identity 没有被使用?

表 acl_class :6 xxxxxxxx/我的类(class)

表 acl_object_identities63 NULL 6 类 1

表 acl_entries199 6 NULL 1 NULL 3 1073741823 1 所有 0 0

不应该是这个吗?199 6 63 1 NULL 3 1073741823 1 所有 0 0

我不明白为什么要创建一个标识对象类,但不与类条目一起使用。

这是我的代码,可能有问题:

//find or create acl
$classIdentity = new ObjectIdentity('class', ClassUtils::getRealClass($class));
$aclProvider = $this->getService('security.acl.provider');
try {
$acl = $aclProvider->findAcl($classIdentity);
} catch (AclNotFoundException $e) {
$acl = $aclProvider->createAcl($classIdentity);
}

//insert class aces
$maskBuilder = new MaskBuilder(128);
$securityId = new RoleSecurityIdentity('ROLE_ADMIN');
$acl->insertClassAce($securityId, $maskBuilder->get());
$aclProvider->updateAcl($acl);

谢谢

最佳答案

希望我已经正确阅读了您的问题。

acl_object_identities 表仅包含:对象标识。即使在创建基于类作用域的 ACE 时,您也必须提供有效的对象标识,并且通过使用名为 class 的“虚拟”标识符来实现。理论上,这可以是除 NULL 或空字符串之外的任何内容。在这些情况下,使用 class 是一种常见的约定。

请记住,ACL 理论上可以混合对象范围 ACE 和全局范围 ACE(即使有或没有字段)。如果 acl_object_identities 表中没有(虚拟)对象标识,您就不能直接使用 ACL,例如更新、删除。

您希望直接访问此类 ACL 的另一个原因是在不存在任何对象时检查权限:

 $objectIdentity = new ObjectIdentity('class', 'The\Namespaced\Class');
if ($context->isGranted('CREATE', $objectIdentity)) {
... // seems you are allowed to create objects of this class
}

这会派上用场来检查类的“全局”CREATE 权限。

acl_entries 表包含所有 ACE,包括对象范围和类范围的 ACE。当 object_identity_id 设置为 NULL 时,条目是类范围的 ACE,否则它是对象范围的 ACE。类范围的 ACE 只需要知道使用了哪个类,并不真正关心对象标识,这就是该字段可以为空的原因。 class_id 字段在这些情况下用于确定类类型。

理论上,他们可以从 acl_entries 中删除 class_id 列,并始终使用 object_identity_id 代替,因为该表也有一个链接到 class_id。但是,这将需要一个额外的连接,而且我们仍然需要在 ace_table 的某处添加条目是类范围 ACE 还是对象范围 ACE。

请记住,关于 ACL 的许多内容都是出于效率和速度原因而编写的,这有时会降低可读性。

关于php - Symfony 2 Acls insertClassAces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26344016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com