或者更具体地说:
鉴于我以“管理员”用户身份登录,并且我想冒充用户“testSiteUser”
鉴于“testSiteUser”节点 (rep:User) 没有一个名为rep:impersonators
set 的受保护 String[] 属性,其值包含 admin
如何更新受保护的属性rep:impersonators
以使其包含管理员?
一旦用户节点设置了这个,我相信设置 cookiesling.sudo
应该允许用户模拟。
到目前为止我所尝试的..
curl -F:name=testSiteUser -Fpwd=testSiteUser
-FpwdConfirm=exampleSiteUser
-F'rep:impersonators'=admin
-F'rep:impersonators'@TypeHint='String[]'
-u admin:admin
http://localhost:8080/system/userManager/user.create.html
回复 500
javax.jcr.nodetype.ConstraintViolationException:尝试设置受保护的属性 rep:impersonators
根据JCR 规范
16.3.12 与受保护属性的交互 JCR 的许多功能将存储库元数据公开为由 mixin 节点类型定义的受保护属性。例如,锁定状态由 mix:lockable 定义的属性 jcr:lockOwner 和 jcr:lockIsDeep 公开。对受保护属性的更改只能通过特定于功能的 API(例如 Node.lock)间接进行,而不是通过像 Node.setProperty 这样的通用写入方法。此类更改不受 jcr:modifyProperties 权限的约束,而是受特定功能特定权限的约束,例如 jcr:lockManagement(请参阅第 16.2.3 节标准权限)。
也许唯一的方法是编写我自己的 Java 代码,如下所示,但我很确定应该有一个 REST API 来做到这一点......
Authorizable authorizable = userManager.getAuthorizable(user.getId());
Principal admin = userManager.getAuthorizable("admin").getPrincipal();
jackrabbitUser = (User) authorizable;
Impersonation impersonation =jackrabbitUser.getImpersonation();
impersonation.grantImpersonation(admin);
基本上 rep:impersonators 是一个只读属性,“通过特定功能的 API 间接”进行管理 使用 Apache Sling 或 Jackrabbit Oak 进行用户模拟的 API 和程序是什么?