Permissions 如何以编程方式授予用户权限?

Permissions 如何以编程方式授予用户权限?,permissions,aem,Permissions,Aem,我知道我可以在中授予权限 ${host}:4502/useradmin 当我双击用户登录并转到权限选项卡时 我想在部署内容包时授予权限 是否可能?当您为用户授予特定节点/路径的权限时,它基本上会将权限存储在rep:policy节点(允许/拒绝)下方的节点级别 我想在部署内容包时授予权限 您可以部署一个仅包含rep:policies的AEM包,该包的作用与通过useradmin设置权限相同 有关打包ACL的信息,请参阅 注意:安装包的用户需要具有设置ACL的权限 要以编程方式设置ACL(如问

我知道我可以在中授予权限

${host}:4502/useradmin
当我双击用户登录并转到
权限
选项卡时

我想在部署内容包时授予权限


是否可能?

当您为用户授予特定节点/路径的权限时,它基本上会将权限存储在rep:policy节点(允许/拒绝)下方的节点级别

我想在部署内容包时授予权限

  • 您可以部署一个仅包含rep:policies的AEM包,该包的作用与通过useradmin设置权限相同
有关打包ACL的信息,请参阅

注意:安装包的用户需要具有设置ACL的权限

要以编程方式设置ACL(如问题的标题所示), 您可能想查看几个Jackrabbit/JCR接口/类

org.apache.jackrabbit.api.security.JackrabbitAccessControlManager
org.apache.jackrabbit.api.security.JackrabbitAccessControlList
javax.jcr.security.Privilege

我在要配置文件名为的权限的文件夹下添加了

_rep_policy.xml
内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
          jcr:primaryType="rep:ACL">
    <allow
            jcr:primaryType="rep:GrantACE"
            rep:principalName="myusername"
            rep:privileges="{Name}[jcr:read,rep:write,jcr:versionManagement,jcr:lockManagement]"/>
</jcr:root>

在pom.xml中,我添加了以下条目:

<profiles>
        <profile>
            <id>autoInstallContentPackage</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.day.jcr.vault</groupId>
                        <artifactId>content-package-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-package</id>
                                <goals>
                                    <goal>install</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            ...
                            <properties>
                                <acHandling>Overwrite</acHandling>   //allow modify permissions
                            </properties>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        ....

自动安装内容包
假的
com.day.jcr.vault
内容包maven插件
安装软件包
安装
...
覆盖//允许修改权限
....

您可以使用curl命令设置权限。AEM OOB为以下对象提供了Curl脚本: 1.创建/删除组 2.创建/删除用户 3.在组中添加组/用户 4.在组中添加权限

使用curl分配权限的一个示例是:

curl -u admin:admin -X POST --noproxy localhost -FauthorizableId=MyGroup -Fchangelog=path:/content/site/page/path,read:true,modify:true,create:true,delete:true,acl_read:false,acl_edit:false,replicate:false http://localhost:4502/.cqactions.html

使用脚本(bat文件、shell脚本或一些java程序)可以轻松地实现自动化。

实际上,您可能需要查看session.getAccessControlManager().getPolicys(…)这是一个很好的答案,我想重点介绍AEM OOB部分。所有的privilege@jcr:阅读需要jackrabbit accessmanager捆绑包的示例。