如何在AEM中读取组权限并将其写入Excel

如何在AEM中读取组权限并将其写入Excel,aem,Aem,我们有一个要求,即我们必须读取给予组的所有权限并将其写入excel。我想知道如何阅读组权限程序。非常感谢您的帮助 谢谢, TusharAEM 6.0+(阿帕奇橡树) 许可方案在/jcr:system/rep:permissionStore下的单独分支中复制。每个可授权(用户/组)的节点在/jcr:system/rep:permissionStore/crx.default/$authId下可用。您可以简单地迭代所有权限,然后使用(例如)或通过JCR/Sling API def crawlAcls

我们有一个要求,即我们必须读取给予组的所有权限并将其写入excel。我想知道如何阅读组权限程序。非常感谢您的帮助

谢谢, Tushar

AEM 6.0+(阿帕奇橡树) 许可方案在
/jcr:system/rep:permissionStore
下的单独分支中复制。每个可授权(用户/组)的节点在
/jcr:system/rep:permissionStore/crx.default/$authId
下可用。您可以简单地迭代所有权限,然后使用(例如)或通过JCR/Sling API

def crawlAcls(authId) {
    getResource("/jcr:system/rep:permissionStore/crx.default/$authId").getChildren().each{ r ->
        def path = r.valueMap["rep:accessControlledPath"]
        doTheStuff(authId, path)
}
}

AEM 5.6及以前版本 使用搜索查询。您应该查找
rep:ACL
类型的节点。基本查询(效率很低!),但可能是进一步改进的起点,如下所示:

String queryString = "SELECT * FROM [rep:ACL] WHERE ISDESCENDANTNODE('" + rootPath + "')";
Iterator<Resource> resouces = resourceResolver.findResources(queryString, Query.JCR_SQL2);

while (resultNodes.hasNext()) {
    Resource resource = resouces.next();
    checkAndDoTheStuff(resource.getPath(), authorizable, acm)
}

private void checkAndDoTheStuff(String path, Authorizable authorizable, AccessControlManager acm) throws RepositoryException {
    Principal principal = authorizable.getPrincipal();
    JackrabbitAccessControlList jackrabbitAcl = JackrabbitAccessControlListUtil.getModifiableAcl(acm, path);
    AccessControlEntry[] accessControlEntries = jackrabbitAcl.getAccessControlEntries();

    for (AccessControlEntry accessControlEntry : accessControlEntries) {
        if (accessControlEntry.getPrincipal().equals(principal)) {
            doTheStuff(authorizable, path)
        }
    }
}
String queryString=“从[rep:ACL]中选择*,其中isDescendatNode(“+rootPath+”)”;
迭代器resources=resourcesolver.findResources(queryString,Query.JCR_SQL2);
while(resultNodes.hasNext()){
Resource=resources.next();
checkAndDoTheStuff(resource.getPath(),可授权,acm)
}
私有void checkAndDoTheStuff(字符串路径、可授权、可授权、AccessControlManager acm)引发RepositoryException{
Principal=authorizable.getPrincipal();
JackrabbitAccessControlList jackrabbitAcl=JackrabbitAccessControlListUtil.getModifiableAcl(acm,路径);
AccessControlEntry[]accessControlEntries=jackrabbitAcl.getAccessControlEntries();
for(AccessControlEntry AccessControlEntry:accessControlEntries){
if(accessControlEntry.getPrincipal().equals(principal)){
doTheStuff(可授权,路径)
}
}
}
AEM 6.0+(Apache OAK) 许可方案在
/jcr:system/rep:permissionStore
下的单独分支中复制。每个可授权(用户/组)的节点在
/jcr:system/rep:permissionStore/crx.default/$authId
下可用。您可以简单地迭代所有权限,然后使用(例如)或通过JCR/Sling API

def crawlAcls(authId) {
    getResource("/jcr:system/rep:permissionStore/crx.default/$authId").getChildren().each{ r ->
        def path = r.valueMap["rep:accessControlledPath"]
        doTheStuff(authId, path)
}
}

AEM 5.6及以前版本 使用搜索查询。您应该查找
rep:ACL
类型的节点。基本查询(效率很低!),但可能是进一步改进的起点,如下所示:

String queryString = "SELECT * FROM [rep:ACL] WHERE ISDESCENDANTNODE('" + rootPath + "')";
Iterator<Resource> resouces = resourceResolver.findResources(queryString, Query.JCR_SQL2);

while (resultNodes.hasNext()) {
    Resource resource = resouces.next();
    checkAndDoTheStuff(resource.getPath(), authorizable, acm)
}

private void checkAndDoTheStuff(String path, Authorizable authorizable, AccessControlManager acm) throws RepositoryException {
    Principal principal = authorizable.getPrincipal();
    JackrabbitAccessControlList jackrabbitAcl = JackrabbitAccessControlListUtil.getModifiableAcl(acm, path);
    AccessControlEntry[] accessControlEntries = jackrabbitAcl.getAccessControlEntries();

    for (AccessControlEntry accessControlEntry : accessControlEntries) {
        if (accessControlEntry.getPrincipal().equals(principal)) {
            doTheStuff(authorizable, path)
        }
    }
}
String queryString=“从[rep:ACL]中选择*,其中isDescendatNode(“+rootPath+”)”;
迭代器resources=resourcesolver.findResources(queryString,Query.JCR_SQL2);
while(resultNodes.hasNext()){
Resource=resources.next();
checkAndDoTheStuff(resource.getPath(),可授权,acm)
}
私有void checkAndDoTheStuff(字符串路径、可授权、可授权、AccessControlManager acm)引发RepositoryException{
Principal=authorizable.getPrincipal();
JackrabbitAccessControlList jackrabbitAcl=JackrabbitAccessControlListUtil.getModifiableAcl(acm,路径);
AccessControlEntry[]accessControlEntries=jackrabbitAcl.getAccessControlEntries();
for(AccessControlEntry AccessControlEntry:accessControlEntries){
if(accessControlEntry.getPrincipal().equals(principal)){
doTheStuff(可授权,路径)
}
}
}

我想知道的是如何通过sling api访问它。你能分享一下你的代码片段吗that@Tushar权限直接应用于存储库级别(OAK)。Sling只是关于Sling验证器,但这不是您要寻找的层。你应该回到JCR API上来。你能给我一些相同的代码片段吗?我想知道的是如何通过sling API访问它。你能分享一下你的代码片段吗that@Tushar权限直接应用于存储库级别(OAK)。Sling只是关于Sling验证器,但这不是您要寻找的层。你应该回到JCRAPI上来。你能给我一些同样的代码片段吗