Author: tdraier
Date: Fri Jul 13 18:47:42 2007
New Revision: 18006
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18006&repname=
=3Djahia
Log:
maps ManageRights engine on jcr ACLs (only read/write now)
Modified:
trunk/core/src/java/org/jahia/engines/filemanager/DAVFilemanager_Engine=
.java
trunk/core/src/java/org/jahia/services/content/JahiaAccessManager.java
trunk/core/src/java/org/jahia/services/webdav/DAVFileAccess.java
Modified: trunk/core/src/java/org/jahia/engines/filemanager/DAVFilemanager_=
Engine.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/engines/filemanager/DAVFilemanager_Engine.java&rev=3D18006&repname=
=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/engines/filemanager/DAVFilemanager_Engine=
.java (original)
+++ trunk/core/src/java/org/jahia/engines/filemanager/DAVFilemanager_Engine=
.java Fri Jul 13 18:47:42 2007
@@ -1262,70 +1262,12 @@
engineMap.put("hasNegativePermissions", Boolean.TRUE);
engineMap.put("actionNames", JahiaAbstractACL.getActionNames());
=
- final Map readPerms =3D dav.getPermissions(DAVFileAccess.READ);
- final Map writePerms =3D dav.getPermissions(DAVFileAccess.WRITE);
- final Map adminPerms =3D dav.getPermissions(DAVFileAccess.MANAGE);
-
- final Set allUsers =3D new HashSet();
- allUsers.addAll(readPerms.keySet());
- allUsers.addAll(writePerms.keySet());
- allUsers.addAll(adminPerms.keySet());
-
- final HashMap aclEntries =3D new HashMap();
- for (final Iterator iterator =3D allUsers.iterator(); iterator.has=
Next();) {
- String s =3D (String) iterator.next();
-
- int permissions =3D 0;
- permissions |=3D getPermissionsAsInt(
- s, JahiaBaseACL.READ_RIGHTS, readPerms);
- permissions |=3D getPermissionsAsInt(
- s, JahiaBaseACL.WRITE_RIGHTS, writePerms);
- permissions |=3D getPermissionsAsInt(
- s, JahiaBaseACL.ADMIN_RIGHTS, adminPerms);
-
- if (s.equals("nobody") || s.equals("all")) {
- s =3D "+/groups/" + JahiaGroupManagerService.GUEST_GROUPNA=
ME + "/members";
- } else if (s.equals("root")) {
- s =3D "+/groups/" + JahiaGroupManagerService.ADMINISTRATOR=
S_GROUPNAME +
- "/members";
- } else if (s.equals("user") || s.equals("authenticated")) {
- s =3D "+/groups/" + JahiaGroupManagerService.USERS_GROUPNA=
ME + "/members";
- } else if (s.equals("guest") || s.equals("unauthenticated")) {
- s =3D "/users/" + JahiaUserManagerService.GUEST_USERNAME +=
"/members";
- }
- if (s.startsWith("+/groups/")) {
- JahiaGroup group =3D ServicesRegistry.getInstance().getJah=
iaGroupManagerService()
- .lookupGroup(jParams.getSiteID(), s.substring(9, s=
.lastIndexOf('/')));
- if (group =3D=3D null) {
- continue;
- }
- aclEntries.put(group, new Integer[]{new Integer(permission=
s)});
-
- } else if (s.startsWith("/users/")) {
- String name =3D s.substring(7);
- if (name.indexOf('/') > -1) {
- name =3D name.substring(0, name.indexOf('/'));
- }
- JahiaUser jahiaUser;
- try {
- jahiaUser =3D ServicesRegistry.getInstance().getJahiaS=
iteUserManagerService()
- .getMember(jParams.getSiteID(), name);
- } catch (JahiaException e) {
- continue;
- }
- aclEntries.put(jahiaUser, new Integer[]{new Integer(permis=
sions)});
-// aclEntries.add(JahiaTools.replacePattern(value, " ", "&n=
bsp;"));
-// aclEntries.add(JahiaTools.replacePattern(aclEntryStr, " =
",
-// " "));
- }
- }
- engineMap.put("aclEntries", aclEntries);
+ engineMap.put("aclEntries", dav.getJahiaAclEntries());
engineMap.put("noInheritanceCut", Boolean.TRUE);
engineMap.put("selectUsrGrp", SelectUG_Engine.getInstance().render=
Link(jParams, EMPTY_STRING));
engineMap.put("inheritance", new Integer(0));
engineMap.put("fieldForm", ServicesRegistry.getInstance().
getJahiaFetcherService().fetchServlet((ParamBean) jParams,=
RIGHTS_JSP));
-// engineMap.put()
return true;
}
=
@@ -1614,30 +1556,16 @@
usr_grp =3D ServicesRegistry.getInstance().getJahiaUse=
rManagerService().
lookupUser(
aclEntry.substring(keyIndex));
-// usr_grpName =3D ((JahiaUser)usr_grp).getUsername();
String username =3D ((JahiaUser) usr_grp).getUsername(=
);
-// if (JahiaUserManagerService.GUEST_USERNAME.equals(userna=
me)) {
-// subject =3D "guest";
-// } else {
- subject =3D "/users/" + username;
-// }
+ subject =3D "u:" + username;
break;
case 'g':
usr_grp =3D ServicesRegistry.getInstance()
.getJahiaGroupManagerService().
lookupGroup(
aclEntry.substring(keyIndex));
-// usr_grpName =3D ((JahiaGroup)usr_grp).getGroupname();
String groupname =3D ((JahiaGroup) usr_grp).getGroupna=
me();
-// if (JahiaGroupManagerService.GUEST_GROUPNAME.equals(grou=
pname)) {
-// subject =3D "nobody";
-// } else if (JahiaGroupManagerService.ADMINISTRATORS_GROUP=
NAME.equals(groupname)) {
-// subject =3D "root";
-// } else if (JahiaGroupManagerService.USERS_GROUPNAME.equa=
ls(groupname)) {
-// subject =3D "user";
-// } else {
- subject =3D "+/groups/" + groupname + "/members";
-// }
+ subject =3D "g:" + groupname;
break;
default:
logger.error("Unknown principal type");
@@ -1716,22 +1644,23 @@
private List areWeGoingtoGenerateA403(final List usageEntries,
final String subject,
final ProcessingContext jParams)=
throws JahiaException {
-
- final boolean groupSubject =3D subject.startsWith("+/groups/");
- final String entryName;
- if (groupSubject) {
- entryName =3D subject.substring(9, subject.lastIndexOf('/')) +=
":" + jParams.getSiteID();
-
- } else {
- String name =3D subject.substring(7);
- if (name.indexOf('/') > -1) {
- name =3D name.substring(0, name.indexOf('/'));
+ final Vector result =3D new Vector(usageEntries.size());
+ Principal pr =3D null;
+ try {
+ if (subject.startsWith("u:")) {
+ pr =3D ServicesRegistry.getInstance().getJahiaSiteUserMana=
gerService().getMember(jParams.getSiteID(), subject.substring(2));
+ } else {
+ pr =3D ServicesRegistry.getInstance().getJahiaGroupManager=
Service().lookupGroup(jParams.getSiteID(), subject.substring(2));
+ }
+ if (pr =3D=3D null) {
+ return result;
}
- entryName =3D name + ":" + jParams.getSiteID();
+ } catch (JahiaException e) {
+ e.printStackTrace();
+ return result;
}
- logger.debug("entryName: " + entryName);
+ String entryName =3D pr.getName();
=
- final Vector result =3D new Vector(usageEntries.size());
// Define an ACLEntry for "Read" Rights
final JahiaAclEntry aclEntry =3D new JahiaAclEntry();
aclEntry.setPermission(JahiaBaseACL.READ_RIGHTS, JahiaAclEntry.ACL=
_YES);
@@ -1755,21 +1684,6 @@
return result;
}
=
- private int getPermissionsAsInt(String subject, int c, Map perms) {
- if (perms.containsKey(subject)) {
- c =3D 1 << c;
- int state =3D ((Integer) perms.get(subject)).intValue();
- if ((state & DAVFileAccess.GRANTED) =3D=3D DAVFileAccess.GRANT=
ED)
- if ((state & DAVFileAccess.INHERITED) =3D=3D DAVFileAccess=
.INHERITED)
- return c + JahiaBaseACL.RIGHTS_INHERITANCE_FLAG;
- else
- return c;
- else if ((state & DAVFileAccess.INHERITED) =3D=3D DAVFileAcces=
s.INHERITED)
- return JahiaBaseACL.RIGHTS_INHERITANCE_FLAG;
- }
- return 0;
- }
-
private String decodeStrangeBrowserEncoding(final String name) {
final int index =3D name.lastIndexOf(File.separator);
final String fileName;
Modified: trunk/core/src/java/org/jahia/services/content/JahiaAccessManager=
.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/content/JahiaAccessManager.java&rev=3D18006&repname=3Djah=
ia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/content/JahiaAccessManager.java =
(original)
+++ trunk/core/src/java/org/jahia/services/content/JahiaAccessManager.java =
Fri Jul 13 18:47:42 2007
@@ -18,7 +18,7 @@
=
import javax.jcr.*;
import javax.security.auth.Subject;
-import java.util.Set;
+import java.util.*;
=
/**
* Created by IntelliJ IDEA.
@@ -79,7 +79,7 @@
}
=
public void close() throws Exception {
- } =
+ }
=
public void checkPermission(ItemId id, int permissions) throws AccessD=
eniedException, ItemNotFoundException, RepositoryException {
if (!isGranted(id,permissions)) {
@@ -96,22 +96,10 @@
NamespaceResolver nr =3D new SessionNamespaceResolver(s);
=
try {
- Path path =3D null;
- try {
- path =3D hierMgr.getPath(id);
- } catch (ItemNotFoundException e) {
- if (!id.denotesNode()) {
- id =3D ((PropertyId)id).getParentId();
- try {
- path =3D hierMgr.getPath(id);
- } catch (ItemNotFoundException e1) {
- return false;
- }
- } else {
- return false;
- }
- }
+ Path path =3D getPath(id);
String jcrPath =3D PathFormat.format(path,nr);
+
+ // Always deny write access on system folders
if (s.itemExists(jcrPath)) {
Item i =3D s.getItem(jcrPath);
if (i.isNode() && permissions !=3D AccessManager.READ) {
@@ -123,6 +111,7 @@
}
}
=
+ // Administrators are always granted
JahiaGroup admingroup =3D ServicesRegistry.getInstance().getJa=
hiaGroupManagerService().lookupGroup(0, JahiaGroupManagerService.ADMINISTRA=
TORS_GROUPNAME);
if (admingroup !=3D null && admingroup.isMember(jahiaUser)) {
return true;
@@ -135,61 +124,14 @@
if (name.getNamespaceURI().equals("")) {
JahiaSite site =3D ServicesRegistry.getInstance().getJ=
ahiaSitesService().getSiteByKey(name.getLocalName());
siteid =3D site.getID();
-
+ // Site administrators are always granted
admingroup =3D ServicesRegistry.getInstance().getJahia=
GroupManagerService().lookupGroup(siteid, JahiaGroupManagerService.ADMINIST=
RATORS_GROUPNAME);
if (admingroup.isMember(jahiaUser)) {
return true;
}
-
- while (jcrPath.length() > 0) {
- if (s.itemExists(jcrPath)) {
- Item i =3D s.getItem(jcrPath);
- if (i.isNode()) {
- Node node =3D (Node) i;
- if (node.isNodeType("mix:accessControlled"=
)) {
- Node acp =3D node.getProperty("jcr:acc=
essControlPolicy").getNode();
- NodeIterator aces =3D acp.getNode("jcr=
:acl").getNodes("jcr:ace");
- while (aces.hasNext()) {
- Node ace =3D aces.nextNode();
- String type =3D ace.getProperty("j=
cr:aceType").getString();
- String principal =3D ace.getProper=
ty("jcr:principal").getString();
- Value[] privileges =3D ace.getProp=
erty("jcr:privileges").getValues();
-
- for (int j =3D 0; j < privileges.l=
ength; j++) {
- Value privilege =3D privileges=
[j];
- if (match(permissions, privile=
ge.getString())) {
- String userName =3D princi=
pal.substring(2);
- if (principal.charAt(0) =
=3D=3D 'u') {
- JahiaUser user =3D Ser=
vicesRegistry.getInstance().getJahiaUserManagerService().lookupUser(siteid,=
userName);
- if (user !=3D null) {
- if (jahiaUser !=3D=
null && user.getUserKey().equals(jahiaUser.getUserKey())) {
- return type.eq=
uals("GRANT");
- }
- }
- } else {
- JahiaGroup group =3D S=
ervicesRegistry.getInstance().getJahiaGroupManagerService().lookupGroup(sit=
eid, userName);
- if (group !=3D null) {
- if (group.getGroup=
name().equals(JahiaGroupManagerService.GUEST_GROUPNAME) || group.isMember(j=
ahiaUser)) {
- return type.eq=
uals("GRANT");
- }
- }
- }
-
- }
- }
- }
- break;
- }
- }
- if ("/".equals(jcrPath)) {
- break;
- } else if (jcrPath.lastIndexOf('/') > 0) {
- jcrPath =3D jcrPath.substring(0,jcrPath.la=
stIndexOf('/'));
- } else {
- jcrPath =3D "/";
- }
- }
- }
+ CheckCommand v =3D new CheckCommand(permissions, sitei=
d);
+ recurseonACPs(jcrPath, s, v);
+ return v.isResult();
}
}
=
@@ -200,20 +142,157 @@
return true;
}
=
+ public Map getPermissions(ItemId id) {
+ try {
+ Session s =3D JCRStoreService.getInstance().getRepository().lo=
gin(JahiaLoginModule.getSystemCredentials());
+ NamespaceResolver nr =3D new SessionNamespaceResolver(s);
+
+ Path path =3D getPath(id);
+ String jcrPath =3D PathFormat.format(path,nr);
+
+ ViewCommand vv =3D new ViewCommand();
+ recurseonACPs(jcrPath, s, vv);
+ return vv.getResults();
+ } catch (Exception e) {
+ e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ }
+ return new HashMap();
+ }
+
+ private Path getPath(ItemId id) throws RepositoryException {
+ Path path =3D null;
+ try {
+ // Get the path of the node
+ path =3D hierMgr.getPath(id);
+ } catch (ItemNotFoundException e) {
+ // This might be a property, get the path of the parent node
+ if (!id.denotesNode()) {
+ id =3D ((PropertyId)id).getParentId();
+ try {
+ path =3D hierMgr.getPath(id);
+ } catch (ItemNotFoundException e1) {
+ }
+ }
+ }
+ return path;
+ }
+
+ private void recurseonACPs(String jcrPath, Session s, Command v) throw=
s RepositoryException {
+ while (jcrPath.length() > 0) {
+ if (s.itemExists(jcrPath)) {
+ Item i =3D s.getItem(jcrPath);
+ if (i.isNode()) {
+ Node node =3D (Node) i;
+ if (node.isNodeType("mix:accessControlled")) {
+ Node acp =3D node.getProperty("jcr:accessControlPo=
licy").getNode();
+ NodeIterator aces =3D acp.getNode("jcr:acl").getNo=
des("jcr:ace");
+ while (aces.hasNext()) {
+ Node ace =3D aces.nextNode();
+ String principal =3D ace.getProperty("jcr:prin=
cipal").getString();
+ String type =3D ace.getProperty("jcr:aceType")=
.getString();
+ Value[] privileges =3D ace.getProperty("jcr:pr=
ivileges").getValues();
+
+ if (v.execute(jcrPath, principal, type, privil=
eges)) return;
+ }
+ }
+ }
+ if ("/".equals(jcrPath)) {
+ return;
+ } else if (jcrPath.lastIndexOf('/') > 0) {
+ jcrPath =3D jcrPath.substring(0,jcrPath.lastIndexOf('/=
'));
+ } else {
+ jcrPath =3D "/";
+ }
+ }
+ }
+ }
+
public boolean match(int permission, String privilege) {
switch (permission) {
- case JahiaAccessManager.READ:
+ case AccessManager.READ:
return "jcr:read".equals(privilege) || "jcr:getAccessContr=
olPolicy".equals(privilege) ||
"jcr:all".equals(privilege) ;
- case JahiaAccessManager.WRITE:
+ case AccessManager.WRITE:
return "jcr:addChildNodes".equals(privilege) || "jcr:setPr=
operties".equals(privilege) ||
"jcr:setAccessControlPolicy".equals(privilege) || =
"jcr:write".equals(privilege) || "jcr:all".equals(privilege) ;
- case JahiaAccessManager.REMOVE:
+ case AccessManager.REMOVE:
return "jcr:removeChildNodes".equals(privilege) || "jcr:wr=
ite".equals(privilege) || "jcr:all".equals(privilege) ;
}
return false;
}
=
+ interface Command {
+ public boolean execute(String jcrPath, String principal, String ty=
pe, Value[] privileges) throws RepositoryException;
+ }
+
+ class CheckCommand implements Command {
+ private int permissions;
+ private int siteid;
+ private boolean result;
+
+ public CheckCommand(int permissions, int siteid) {
+ this.permissions =3D permissions;
+ this.siteid =3D siteid;
+ }
+
+ public boolean isResult() {
+ return result;
+ }
+
+ public boolean execute(String jcrPath, String principal, String ty=
pe, Value[] privileges) throws RepositoryException {
+ for (int j =3D 0; j < privileges.length; j++) {
+ Value privilege =3D privileges[j];
+ if (match(permissions, privilege.getString())) {
+ String userName =3D principal.substring(2);
+ if (principal.charAt(0) =3D=3D 'u') {
+ JahiaUser user =3D ServicesRegistry.getInstance().=
getJahiaUserManagerService().lookupUser(siteid, userName);
+ if (user !=3D null) {
+ if (jahiaUser !=3D null && user.getUserKey().e=
quals(jahiaUser.getUserKey())) {
+ result =3D type.equals("GRANT");
+ return true;
+ }
+ }
+ } else {
+ JahiaGroup group =3D ServicesRegistry.getInstance(=
).getJahiaGroupManagerService().lookupGroup(siteid, userName);
+ if (group !=3D null) {
+ if (group.getGroupname().equals(JahiaGroupMana=
gerService.GUEST_GROUPNAME) || group.isMember(jahiaUser)) {
+ result =3D type.equals("GRANT");
+ return true;
+ }
+ }
+ }
+
+ }
+ }
+ return false;
+ }
+
+ }
+
+ class ViewCommand implements Command {
+ private Map results =3D new HashMap();
+
+ public Map getResults() {
+ return results;
+ }
+
+ public boolean execute(String jcrPath, String principal, String ty=
pe, Value[] privileges) throws RepositoryException {
+ List p =3D (List) results.get(principal);
+
+ if (p =3D=3D null) {
+ p =3D new ArrayList();
+ results.put(principal, p);
+ for (int i =3D 0; i < privileges.length; i++) {
+ Value privilege =3D privileges[i];
+ p.add(new String[]{jcrPath, type, privilege.getString(=
)});
+ }
+ }
+
+ return false;
+ }
+ }
+
+
public boolean canAccess(String workspaceName) throws NoSuchWorkspaceE=
xception, RepositoryException {
return true;
}
Modified: trunk/core/src/java/org/jahia/services/webdav/DAVFileAccess.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/webdav/DAVFileAccess.java&rev=3D18006&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/webdav/DAVFileAccess.java (origi=
nal)
+++ trunk/core/src/java/org/jahia/services/webdav/DAVFileAccess.java Fri Ju=
l 13 18:47:42 2007
@@ -44,14 +44,18 @@
import org.jahia.services.content.JCRStoreService;
import org.jahia.services.content.JahiaIOManager;
import org.jahia.services.content.Constants;
+import org.jahia.services.content.JahiaAccessManager;
+import org.jahia.services.acl.JahiaBaseACL;
import org.jahia.spring.aop.interceptor.SilentJamonPerformanceMonitorInter=
ceptor;
import org.jahia.urls.URI;
+import org.jahia.exceptions.JahiaException;
=
import javax.servlet.http.HttpServletRequest;
import javax.jcr.*;
import javax.jcr.lock.Lock;
import java.io.*;
import java.util.*;
+import java.security.Principal;
=
/**
* @author Thomas Draier
@@ -216,6 +220,50 @@
public void alignPermsWithField(JahiaField theField, Set users) {
}
=
+ public Map getJahiaAclEntries() {
+ Map aclEntries =3D new HashMap();
+
+ try {
+ String myPath =3D objectNode.getPath();
+
+ Map permissions =3D ((JahiaAccessManager) session.getAccessMan=
ager()).getPermissions(((NodeImpl)objectNode).getId());
+
+ for (Iterator iterator =3D permissions.keySet().iterator(); it=
erator.hasNext();) {
+ int p =3D 0;
+ String prString =3D (String) iterator.next();
+ Principal pr;
+ try {
+ if (prString.startsWith("u:")) {
+ pr =3D ServicesRegistry.getInstance().getJahiaSite=
UserManagerService().getMember(site.getID(), prString.substring(2));
+ } else {
+ pr =3D ServicesRegistry.getInstance().getJahiaGrou=
pManagerService().lookupGroup(site.getID(), prString.substring(2));
+ }
+ } catch (JahiaException e) {
+ e.printStackTrace();
+ continue;
+ }
+
+
+ List l =3D (List) permissions.get(prString);
+ for (Iterator iterator1 =3D l.iterator(); iterator1.hasNex=
t();) {
+ String[] s =3D (String[]) iterator1.next();
+ if (!s[0].equals(myPath)) p |=3D JahiaBaseACL.RIGHTS_I=
NHERITANCE_FLAG;
+ if (s[1].equals("GRANT")) {
+ if (s[2].equals("jcr:read")) {
+ p |=3D (1<<JahiaBaseACL.READ_RIGHTS);
+ } else if (s[2].equals("jcr:write")) {
+ p|=3D (1<<JahiaBaseACL.WRITE_RIGHTS);
+ }
+ }
+ }
+ aclEntries.put(pr, new Integer[]{new Integer(p)});
+ }
+ } catch (RepositoryException e) {
+ e.printStackTrace();
+ }
+ return aclEntries;
+ }
+
public Map getPermissions(String actionString) {
return new HashMap();
}
@@ -491,21 +539,90 @@
if (exception !=3D null) {
return false;
}
+ try {
+ List gr =3D new ArrayList();
+ List den =3D new ArrayList();
+ if (perm.charAt(0)=3D=3D'R') { gr.add("jcr:read"); } else { de=
n.add("jcr:read"); }
+ if (perm.charAt(1)=3D=3D'W') { gr.add("jcr:write"); } else { d=
en.add("jcr:write"); }
+
+ Node acl =3D getAcl();
+ NodeIterator ni =3D acl.getNodes();
+ Node aceg =3D null;
+ Node aced =3D null;
+ while (ni.hasNext()) {
+ Node ace =3D ni.nextNode();
+ if (ace.getProperty("jcr:principal").getString().equals(us=
er)) {
+ if (ace.getProperty("jcr:aceType").getString().equals(=
"GRANT")) {
+ aceg =3D ace;
+ } else {
+ aced =3D ace;
+ }
+ }
+ }
+ if (aceg =3D=3D null) {
+ aceg =3D acl.addNode("jcr:ace","nt:ace");
+ aceg.setProperty("jcr:principal",user);
+ aceg.setProperty("jcr:protected",false);
+ aceg.setProperty("jcr:aceType","GRANT");
+ }
+ if (aced =3D=3D null) {
+ aced =3D acl.addNode("jcr:ace","nt:ace");
+ aced.setProperty("jcr:principal",user);
+ aced.setProperty("jcr:protected",false);
+ aced.setProperty("jcr:aceType","DENY");
+ }
+
+ String[] grs =3D new String[gr.size()];
+ System.arraycopy(gr.toArray(),0,grs,0,gr.size());
+ aceg.setProperty("jcr:privileges",grs);
+ String[] dens =3D new String[den.size()];
+ System.arraycopy(den.toArray(),0,dens,0,den.size());
+ aced.setProperty("jcr:privileges",dens);
+
+ session.getItem("/jcr:system/jcr:accessControl").save();
+ objectNode.save();
+ } catch (RepositoryException e) {
+ e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ }
=
return true;
}
=
- public boolean revokePermissions (String user) {
- if (exception !=3D null) {
- return false;
+ private Node getAcl() throws RepositoryException {
+ Node acl;
+ if (!objectNode.isNodeType("mix:accessControlled")) {
+ Node ac =3D (Node) session.getItem("/jcr:system/jcr:accessCont=
rol");
+ Node acp =3D ac.addNode("jahia:acp"+objectNode.getUUID(), "nt:=
accessControlPolicy");
+ acl =3D acp.addNode("jcr:acl", "nt:acl");
+ objectNode.addMixin("mix:accessControlled");
+ objectNode.setProperty("jcr:accessControlPolicy", acp);
+ } else {
+ Node acp =3D objectNode.getProperty("jcr:accessControlPolicy")=
.getNode();
+ acl =3D acp.getNode("jcr:acl");
}
- return true;
+ return acl;
}
=
- public boolean revokePermissions(String user, String action, boolean i=
nherited) {
+ public boolean revokePermissions (String user) {
if (exception !=3D null) {
return false;
}
+ try {
+ Node acl =3D getAcl();
+ NodeIterator ni =3D acl.getNodes();
+ while (ni.hasNext()) {
+ Node ace =3D ni.nextNode();
+ if (ace.getProperty("jcr:principal").getString().equals(us=
er)) {
+ ace.remove();
+ }
+ }
+
+ session.getItem("/jcr:system/jcr:accessControl").save();
+ objectNode.save();
+ } catch (RepositoryException e) {
+ e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ }
+
return true;
}
=
@@ -536,7 +653,7 @@
}
=
return res;
- }
+ } =
=
public String getName () {
if (exception !=3D null) {
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list