ACEUtils.java
3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.jcr.RepositoryException
* javax.jcr.Session
* javax.jcr.Value
* javax.jcr.ValueFactory
* javax.jcr.security.AccessControlManager
* javax.jcr.security.AccessControlPolicy
* javax.jcr.security.Privilege
* org.apache.commons.lang.StringUtils
* org.apache.jackrabbit.api.security.JackrabbitAccessControlList
* org.apache.jackrabbit.api.security.principal.PrincipalManager
* org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.day.cq.wcm.msm.impl.actions.util;
import com.day.cq.wcm.msm.impl.actions.util.AccessControlEntry;
import java.security.Principal;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.Privilege;
import org.apache.commons.lang.StringUtils;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ACEUtils {
private static final Logger log = LoggerFactory.getLogger(ACEUtils.class);
private static final String REP_GLOB = "rep:glob";
public static boolean addAccessControlEntry(Session session, String absPath, Principal principal, Privilege[] privileges, AccessControlEntry ace) throws RepositoryException {
JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList((Session)session, (String)absPath);
if (acl != null) {
String restrictionRule = ace.getRestrictionPattern();
HashMap<String, Value> restrictions = new HashMap<String, Value>();
if (restrictionRule != null) {
ValueFactory valueFactory = session.getValueFactory();
Value ruleRestrictionValue = valueFactory.createValue(restrictionRule, 1);
restrictions.put("rep:glob", ruleRestrictionValue);
}
if (acl.addEntry(principal, privileges, ace.isAllow(), restrictions)) {
session.getAccessControlManager().setPolicy(absPath, (AccessControlPolicy)acl);
return true;
}
}
return false;
}
public static Principal getPrincipal(AccessControlEntry ace, PrincipalManager prManager) {
Principal foundPrincipal = null;
String principalName = null;
if (ace != null) {
principalName = ace.getPrincipalName();
}
if (StringUtils.isNotEmpty((String)principalName) && prManager != null && prManager.hasPrincipal(principalName)) {
foundPrincipal = prManager.getPrincipal(principalName);
}
if (foundPrincipal == null) {
log.error("Cannot find invalid principal {}!", (Object)principalName);
}
return foundPrincipal;
}
}