您可以使用一些内置的 MODX 方法来实现这一点。
这未经测试,可能不起作用,但这可能是一种方法:
// userGroups = membergroups
$userGroups = $user->getUserGroups();
foreach ($userGroups as $userGroup) {
$resGroups = $userGroup->getResourceGroups();
foreach ($resGroups as $resGroup) {
$resources = $resGroup->getResources();
// merge resources into an array or something
}
}
查看moduser.class.php、modusergroup.class.php和modresourcegroup.class.php以查看这些方法背后的查询。您也许可以使它们适应一种更有效的查询。
另外,如果我没有误解您想要实现的目标,那么您的结果应该类似于用户在登录时在管理器的资源树中看到的结果?
这使用了 resource/getnodes.class.php 处理器,它使用 getCollection 为每个上下文检索所有可能的资源,然后遍历每个资源并决定是否使用$resource->checkPolicy('list')
. 这可能是另一种需要考虑的方法。
我通常使用自定义数据而不是 MODX 资源,所以很想听听你是如何处理这个问题的。