stephan 2002/07/01 09:41:55 Modified: src/scratchpad/src/org/apache/cocoon/components/source RestrictableSource.java src/scratchpad/src/org/apache/cocoon/components/source/helpers SourcePermission.java src/scratchpad/src/org/apache/cocoon/components/source/impl SlideSource.java WebDAVSource.java src/scratchpad/src/org/apache/cocoon/generation SourceDescriptionGenerator.java src/scratchpad/webapp/samples/slide rdf2html.xsl slide.xconf Log: Change the interface RestrictableSource to create the possibility to grant permission. Add the implementation to SlideSource. Revision Changes Path 1.4 +7 -6 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/RestrictableSource.java Index: RestrictableSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/RestrictableSource.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RestrictableSource.java 30 Jun 2002 19:53:40 -0000 1.3 +++ RestrictableSource.java 1 Jul 2002 16:41:54 -0000 1.4 @@ -56,6 +56,7 @@ package org.apache.cocoon.components.source; import org.apache.cocoon.components.source.helpers.SourceCredential; +import org.apache.cocoon.components.source.helpers.SourcePermission; import org.apache.excalibur.source.Source; import org.apache.excalibur.source.SourceException; @@ -78,20 +79,20 @@ */ public void setSourceCredential(SourceCredential sourcecredential) throws SourceException; - /* + /** * Set a permission to this source * * @param sourcepermission Permission, which should be set * * @throws SourceException If an exception occurs during this operation - * + */ public void setSourcePermission(SourcePermission sourcepermission) throws SourceException; - /* + /** * Returns a list of the existing permissions * * @return Array of SourcePermission - * - public SourcePermission[] getSourcePermissions() throws SourceException;*/ + */ + public SourcePermission[] getSourcePermissions() throws SourceException; } 1.3 +3 -3 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/SourcePermission.java Index: SourcePermission.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/SourcePermission.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SourcePermission.java 30 Jun 2002 19:53:40 -0000 1.2 +++ SourcePermission.java 1 Jul 2002 16:41:55 -0000 1.3 @@ -71,8 +71,8 @@ public final static String PRIVILEGE_READ = "read"; public final static String PRIVILEGE_WRITE = "write"; - //public final static String PRIVILEGE_READ_ACL = "read-acl"; - //public final static String PRIVILEGE_WRITE_ACL = "write-acl"; + public final static String PRIVILEGE_READ_ACL = "read-acl"; + public final static String PRIVILEGE_WRITE_ACL = "write-acl"; public final static String PRIVILEGE_READ_SOURCE = "read-source"; public final static String PRIVILEGE_CREATE_SOURCE = "create-source"; 1.8 +319 -27 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java Index: SlideSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- SlideSource.java 30 Jun 2002 23:14:55 -0000 1.7 +++ SlideSource.java 1 Jul 2002 16:41:55 -0000 1.8 @@ -87,6 +87,7 @@ import org.apache.slide.authenticate.SecurityToken; import org.apache.slide.common.EmbeddedDomain; import org.apache.slide.common.NamespaceAccessToken; +import org.apache.slide.common.NamespaceConfig; import org.apache.slide.common.SlideException; import org.apache.slide.common.SlideToken; import org.apache.slide.common.SlideTokenImpl; @@ -117,6 +118,7 @@ import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.Iterator; @@ -457,7 +459,7 @@ // Owner //revisionDescriptor.setOwner( - // slideToken.getCredentialsToken().getPublicCredentials()); + // slideToken.getCredentialthis.slideToken().getPublicCredentials()); // Creating revisionDescriptor associated with the object NodeRevisionContent revisionContent = @@ -650,42 +652,332 @@ * @throws SourceException If an exception occurs during this operation **/ public void setSourcePermission(SourcePermission sourcepermission) throws SourceException { - /*NodePermission permission = - new NodePermission(this.uri, sourcepermission.getSubject(), action, - sourcepermission.isInheritable(), - sourcepermission.isNegative()); - this.security.grantPermission(this.slideToken, permission);*/ - throw new SourceException("Operation not yet supported"); + NamespaceConfig config = this.nat.getNamespaceConfig(); + + String principal = config.getUsersPath()+"/"+sourcepermission.getPrincipal(); + boolean negative = sourcepermission.isNegative(); + boolean inheritable = sourcepermission.isInheritable(); + + if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_ALL)) { + addPermission(principal, "/", negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ)) { + addPermission(principal, config.getReadObjectAction().getUri(), negative, inheritable); + addPermission(principal, config.getReadLocksAction().getUri(), negative, inheritable); + addPermission(principal, config.getReadRevisionMetadataAction().getUri(), negative, inheritable); + addPermission(principal, config.getReadRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_SOURCE)) { + addPermission(principal, config.getReadObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_LOCKS)) { + addPermission(principal, config.getReadLocksAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_PROPERTY)) { + addPermission(principal, config.getReadRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_CONTENT)) { + addPermission(principal, config.getReadRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE)) { + addPermission(principal, config.getCreateObjectAction().getUri(), negative, inheritable); + addPermission(principal, config.getRemoveObjectAction().getUri(), negative, inheritable); + addPermission(principal, config.getLockObjectAction().getUri(), negative, inheritable); + addPermission(principal, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable); + addPermission(principal, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable); + addPermission(principal, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable); + addPermission(principal, config.getCreateRevisionContentAction().getUri(), negative, inheritable); + addPermission(principal, config.getModifyRevisionContentAction().getUri(), negative, inheritable); + addPermission(principal, config.getRemoveRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_SOURCE)) { + addPermission(principal, config.getCreateObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_SOURCE)) { + addPermission(principal, config.getRemoveObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_LOCK_SOURCE)) { + addPermission(principal, config.getLockObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_PROPERTY)) { + addPermission(principal, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_PROPERTY)) { + addPermission(principal, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_PROPERTY)) { + addPermission(principal, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_CONTENT)) { + addPermission(principal, config.getCreateRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_CONTENT)) { + addPermission(principal, config.getModifyRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_CONTENT)) { + addPermission(principal, config.getRemoveRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_ACL)) { + addPermission(principal, config.getReadPermissionsAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE_ACL)) { + addPermission(principal, config.getGrantPermissionAction().getUri(), negative, inheritable); + addPermission(principal, config.getRevokePermissionAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_GRANT_PERMISSION)) { + addPermission(principal, config.getGrantPermissionAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REVOKE_PERMISSION)) { + addPermission (principal, config.getRevokePermissionAction().getUri(), negative, inheritable); + } } /** - * Returns a list of the existing permissions + * Add permission to the list of permissions to set. + */ + private void addPermission(String principal, String action, + boolean negative, boolean inheritable) throws SourceException { + try { + NodePermission permission = new NodePermission + (this.uri, principal, action, inheritable, negative); + this.security.grantPermission(this.slideToken, permission); + } catch (SlideException se) { + getLogger().warn("Couldn't grant permission", se); + throw new SourceException("Couldn't grant permission", se); + } + } + + /** + * Returns a list of the existing permissions. + * Based on the implementation of org.apache.slide.webdav.util.PropertyHelper . * * @return Array of SourcePermission **/ public SourcePermission[] getSourcePermissions() throws SourceException { - /*try { - Vector sourcepermissions = new Vector(); + try { - NodePermission permission; - for(Enumeration permissions = this.security.enumeratePermissions(this.slideToken, this.uri); - permissions.hasMoreElements();) { - - permission = (NodePermission) permissions.nextElement(); - - sourcepermissions.addElement(new SourcePermission(permission.getSubjectUri(), - permission.getActionUri(), - permission.isInheritable(), - permission.isNegative())); - } + NamespaceConfig config = this.nat.getNamespaceConfig(); - return sourcepermissions.elements(); - } catch (SlideException se) { - throw new SourceException("Could not retrieve permissions", se); - }*/ + ObjectNode current = structure.retrieve(this.slideToken, this.uri); + + security.checkCredentials(this.slideToken, current, config.getReadPermissionsAction()); + + String userspath = config.getUsersPath(); + + // read + String readObjectUri = config.getReadObjectAction().getUri(); + String readRevisionMetadataUri = + config.getReadRevisionMetadataAction().getUri(); + String readRevisionContentUri = + config.getReadRevisionContentAction().getUri(); + + // write + String createObjectUri = config.getCreateObjectAction().getUri(); + String removeObjectUri = config.getRemoveObjectAction().getUri(); + String lockObjectUri = config.getLockObjectAction().getUri(); + String readLocksUri = config.getReadLocksAction().getUri(); + String createRevisionMetadataUri = + config.getCreateRevisionMetadataAction().getUri(); + String modifyRevisionMetadataUri = + config.getModifyRevisionMetadataAction().getUri(); + String removeRevisionMetadataUri = + config.getRemoveRevisionMetadataAction().getUri(); + String createRevisionContentUri = + config.getCreateRevisionContentAction().getUri(); + String modifyRevisionContentUri = + config.getModifyRevisionContentAction().getUri(); + String removeRevisionContentUri = + config.getRemoveRevisionContentAction().getUri(); + + // read-acl + String readPermissionsUri = config.getReadPermissionsAction().getUri(); + + // write-acl + String grantPermissionUri = config.getGrantPermissionAction().getUri(); + String revokePermissionUri = + config.getRevokePermissionAction().getUri(); - throw new SourceException("Operation not yet supported"); + boolean inheritedPermissions = false; + Vector permissions = new Vector(); + + ArrayList sourcepermissions = new ArrayList(); + + while (current != null) { + + try { + // put all permissions in a list + permissions.clear(); + Enumeration aclList = security.enumeratePermissions(this.slideToken, current); + while (aclList.hasMoreElements()) { + + NodePermission permission = (NodePermission) aclList.nextElement(); + + // if we are processing inheritedPermissions (from parent and up) + // then the permission should be inheritable + if (inheritedPermissions && !permission.isInheritable()) { + // continue with next permission + continue; + } + permissions.add(permission); + } + + // start combining and writing the permissions + while (permissions.size()>0) { + + NodePermission permission = (NodePermission) permissions.get(0); + permissions.remove(0); + + String principal = permission.getSubjectUri(); + boolean negative = permission.isNegative(); + + String action = permission.getActionUri(); + + // read + boolean isReadObject = readObjectUri.startsWith(action); + boolean isReadLocks = readLocksUri.startsWith(action); + boolean isReadRevisionMetadata = readRevisionMetadataUri.startsWith(action); + boolean isReadRevisionContent = readRevisionContentUri.startsWith(action); + + // write + boolean isCreateObject = createObjectUri.startsWith(action); + boolean isRemoveObject = removeObjectUri.startsWith(action); + boolean isLockObject = lockObjectUri.startsWith(action); + boolean isCreateRevisionMetadata = createRevisionMetadataUri.startsWith(action); + boolean isModifyRevisionMetadata = modifyRevisionMetadataUri.startsWith(action); + boolean isRemoveRevisionMetadata = removeRevisionMetadataUri.startsWith(action); + boolean isCreateRevisionContent = createRevisionContentUri.startsWith(action); + boolean isModifyRevisionContent = modifyRevisionContentUri.startsWith(action); + boolean isRemoveRevisionContent = removeRevisionContentUri.startsWith(action); + + //read-acl + boolean isReadPermissions = readPermissionsUri.startsWith(action); + + // write-acl + boolean isGrantPermission = grantPermissionUri.startsWith(action); + boolean isRevokePermission = revokePermissionUri.startsWith(action); + + // check the other permissions to combine them + // (if they are for the same principal/negative) + for (int i=0; i<permissions.size() ; i++) { + NodePermission otherPermission = (NodePermission) permissions.get(i); + if (principal.equals(otherPermission.getSubjectUri()) && + (negative==otherPermission.isNegative())) { + + permissions.remove(i); + i--; // because we removed the current one + + action = otherPermission.getActionUri(); + + // read + isReadObject |= readObjectUri.startsWith(action); + isReadLocks |= readLocksUri.startsWith(action); + isReadRevisionMetadata |= readRevisionMetadataUri.startsWith(action); + isReadRevisionContent |= readRevisionContentUri.startsWith(action); + + // write + isCreateObject |= createObjectUri.startsWith(action); + isRemoveObject |= removeObjectUri.startsWith(action); + isLockObject |= lockObjectUri.startsWith(action); + isCreateRevisionMetadata |= createRevisionMetadataUri.startsWith(action); + isModifyRevisionMetadata |= modifyRevisionMetadataUri.startsWith(action); + isRemoveRevisionMetadata |= removeRevisionMetadataUri.startsWith(action); + isCreateRevisionContent |= createRevisionContentUri.startsWith(action); + isModifyRevisionContent |= modifyRevisionContentUri.startsWith(action); + isRemoveRevisionContent |= removeRevisionContentUri.startsWith(action); + + //read-acl + isReadPermissions |= readPermissionsUri.startsWith(action); + + // write-acl + isGrantPermission |= grantPermissionUri.startsWith(action); + isRevokePermission |= revokePermissionUri.startsWith(action); + } + } + + // WebDAV privileges + boolean isRead = isReadObject && isReadLocks && + isReadRevisionMetadata && isReadRevisionContent; + + boolean isWrite = isCreateObject && isRemoveObject && isLockObject && + isCreateRevisionMetadata && isModifyRevisionMetadata && + isRemoveRevisionMetadata && + isCreateRevisionContent && isModifyRevisionContent && + isRemoveRevisionContent; + + boolean isReadAcl = isReadPermissions; + + boolean isWriteAcl = isGrantPermission && isRevokePermission; + + boolean isAll = isRead && isWrite && isReadAcl && isWriteAcl; + + + SourcePermission sourcepermission = new SourcePermission(null, null, + inheritedPermissions, negative); + + if (principal.equals("~")) + sourcepermission.setPrincipal(SourcePermission.PRINCIPAL_SELF); + else if (principal.equals("nobody")) + sourcepermission.setPrincipal(SourcePermission.PRINCIPAL_GUEST); + else if (principal.startsWith(userspath+"/")) + sourcepermission.setPrincipal(principal.substring(userspath.length()+1)); + else + sourcepermission.setPrincipal(principal); + + if (isAll) { + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_ALL); + } else { + if (isRead) { + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ); + } else { + if (isReadObject) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ_SOURCE); + if (isReadLocks) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ_LOCKS); + if (isReadRevisionMetadata) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ_PROPERTY); + if (isReadRevisionContent) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ_CONTENT); + } + if (isWrite) { + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_WRITE); + } else { + if (isCreateObject) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_CREATE_SOURCE); + if (isRemoveObject) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_REMOVE_SOURCE); + if (isLockObject) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_LOCK_SOURCE); + if (isCreateRevisionMetadata) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_CREATE_PROPERTY); + if (isModifyRevisionMetadata) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_MODIFY_PROPERTY); + if (isRemoveRevisionMetadata) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_REMOVE_PROPERTY); + if (isCreateRevisionContent) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_CREATE_CONTENT); + if (isModifyRevisionContent) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_MODIFY_CONTENT); + if (isRemoveRevisionContent) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_REMOVE_CONTENT); + } + if (isReadAcl) { + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_READ_ACL); + } + if (isWriteAcl) { + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_WRITE_ACL); + } else { + if (isGrantPermission) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_GRANT_PERMISSION); + if (isRevokePermission) + sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_REVOKE_PERMISSION); + } + } + + sourcepermissions.add(sourcepermission); + } + } catch (SlideException se) { + getLogger().error("Exception eccurs while retrieveing source permission", se); + throw new SourceException("Exception eccurs while retrieveing source permission", se); + } + + inheritedPermissions = true; + + try { + current = structure.getParent(this.slideToken, current); + } catch (SlideException e) { + break; + } + } + + SourcePermission[] sourcepermissionArray = new SourcePermission[sourcepermissions.size()]; + return (SourcePermission[]) sourcepermissions.toArray((Object[])sourcepermissionArray); + + } catch (SlideException se) { + getLogger().error("Exception eccurs while retrieveing source permission", se); + throw new SourceException("Exception eccurs while retrieveing source permission", se); + } } /** 1.2 +22 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/WebDAVSource.java Index: WebDAVSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/WebDAVSource.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WebDAVSource.java 21 Jun 2002 13:39:43 -0000 1.1 +++ WebDAVSource.java 1 Jul 2002 16:41:55 -0000 1.2 @@ -60,6 +60,7 @@ import org.apache.cocoon.components.source.RestrictableSource; import org.apache.cocoon.components.source.WriteableSource; import org.apache.cocoon.components.source.helpers.SourceCredential; +import org.apache.cocoon.components.source.helpers.SourcePermission; import org.apache.commons.httpclient.HttpException; @@ -271,6 +272,26 @@ } catch (IOException ioe) { throw new IllegalStateException(ioe.getMessage()); } + } + + /** + * Set a permission to this source + * + * @param sourcepermission Permission, which should be set + * + * @throws SourceException If an exception occurs during this operation + */ + public void setSourcePermission(SourcePermission sourcepermission) throws SourceException { + throw new SourceException("Operation not supported"); + } + + /** + * Returns a list of the existing permissions + * + * @return Array of SourcePermission + */ + public SourcePermission[] getSourcePermissions() throws SourceException { + throw new SourceException("Operation not supported"); } public class WebDAVSourceOutputStream extends ByteArrayOutputStream { 1.6 +22 -20 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator.java Index: SourceDescriptionGenerator.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SourceDescriptionGenerator.java 29 Jun 2002 21:04:12 -0000 1.5 +++ SourceDescriptionGenerator.java 1 Jul 2002 16:41:55 -0000 1.6 @@ -130,8 +130,8 @@ private static final String URI_ATTR_NAME = "about"; - private static final String SUBJECT_ATTR_NAME = "subject"; - private static final String ACTION_ATTR_NAME = "action"; + private static final String PRINCIPAL_ATTR_NAME = "principal"; + private static final String PRIVILEGE_ATTR_NAME = "privilege"; private static final String INHERITABLE_ATTR_NAME = "inheritable"; private static final String NEGATIVE_ATTR_NAME = "negative"; @@ -282,8 +282,13 @@ this.contentHandler.endPrefixMapping("prop");*/ - /*if (source instanceof RestrictableSource) - pushSourcePermissions((RestrictableSource)source);*/ + try { + if (source instanceof RestrictableSource) + pushSourcePermissions((RestrictableSource)source); + } catch (SourceException se) { + getLogger().warn("Could not retrieve source permissions", se); + } + if (source instanceof LockableSource) pushSourceLocks((LockableSource)source); if ((source instanceof TraversableSource) && (deep>0)) @@ -366,33 +371,30 @@ } } - /*private void pushSourcePermissions(RestrictableSource source) throws SAXException, SourceException { - Enumeration permissionsList = source.getSourcePermissions(); - SourcePermission permission; + private void pushSourcePermissions(RestrictableSource source) throws SAXException, SourceException { + SourcePermission[] permissions = source.getSourcePermissions(); - if (permissionsList.hasMoreElements()) { + if ((permissions!=null) && (permissions.length>0)) { this.contentHandler.startElement(SOURCE_NS, PERMISSIONS_NODE_NAME, PERMISSIONS_NODE_NAME, new AttributesImpl()); this.contentHandler.startElement(RDF_NS, SEQUENCE_NODE_NAME, RDF_PREFIX+':'+SEQUENCE_NODE_NAME, new AttributesImpl()); - while (permissionsList.hasMoreElements()) { - - permission = (SourcePermission) permissionsList.nextElement(); + for(int i=0; i<permissions.length; i++) { this.contentHandler.startElement(RDF_NS, SEQUENCEITEM_NODE_NAME, RDF_PREFIX+':'+SEQUENCEITEM_NODE_NAME, new AttributesImpl()); AttributesImpl attributes = new AttributesImpl(); - attributes.addAttribute("", SUBJECT_ATTR_NAME, SUBJECT_ATTR_NAME, "CDATA", - permission.getSubject()); - attributes.addAttribute("", ACTION_ATTR_NAME, ACTION_ATTR_NAME, "CDATA", - permission.getAction()); + attributes.addAttribute("", PRINCIPAL_ATTR_NAME, PRINCIPAL_ATTR_NAME, "CDATA", + permissions[i].getPrincipal()); + attributes.addAttribute("", PRIVILEGE_ATTR_NAME, PRIVILEGE_ATTR_NAME, "CDATA", + permissions[i].getPrivilege()); attributes.addAttribute("", INHERITABLE_ATTR_NAME, INHERITABLE_ATTR_NAME, "CDATA", - String.valueOf(permission.isInheritable())); + String.valueOf(permissions[i].isInheritable())); attributes.addAttribute("", NEGATIVE_ATTR_NAME, NEGATIVE_ATTR_NAME, "CDATA", - String.valueOf(permission.isNegative())); + String.valueOf(permissions[i].isNegative())); this.contentHandler.startElement(SOURCE_NS, PERMISSION_NODE_NAME, PERMISSION_NODE_NAME, attributes); @@ -408,7 +410,7 @@ this.contentHandler.endElement(SOURCE_NS, PERMISSIONS_NODE_NAME, PERMISSIONS_NODE_NAME); } - }*/ + } public void pushSourceLocks(LockableSource source) throws SAXException, SourceException { Enumeration locks = source.getSourceLocks(); @@ -430,7 +432,7 @@ AttributesImpl attributes = new AttributesImpl(); attributes = new AttributesImpl(); - attributes.addAttribute("", SUBJECT_ATTR_NAME, SUBJECT_ATTR_NAME, "CDATA", + attributes.addAttribute("", PRINCIPAL_ATTR_NAME, PRINCIPAL_ATTR_NAME, "CDATA", lock.getSubject()); attributes.addAttribute("", TYPE_ATTR_NAME, TYPE_ATTR_NAME, "CDATA", lock.getType()); 1.2 +33 -12 xml-cocoon2/src/scratchpad/webapp/samples/slide/rdf2html.xsl Index: rdf2html.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/rdf2html.xsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- rdf2html.xsl 1 Jul 2002 15:09:21 -0000 1.1 +++ rdf2html.xsl 1 Jul 2002 16:41:55 -0000 1.2 @@ -30,11 +30,11 @@ </td> </tr> <tr> - <td colspan="3" bgcolor="#eeeeee"><a href="/cocoon/samples/slide/browse/">Home</a></td> + <td colspan="3" bgcolor="#eeeeee"><a href="/cocoon/mount/slide/browse/">Home</a></td> <td colspan="2" bgcolor="#eeeeee"> <xsl:if test="dav:getcontentlength!='' and dav:getcontentlength!='0'"> <xsl:if test="dav:resourcetype!='<collection/>'"> - <a href="/cocoon/samples/slide/view/{@rdf:about}">Download</a> + <a href="/cocoon/mount/slide/view/{@rdf:about}">Download</a> </xsl:if> </xsl:if> </td> @@ -132,8 +132,8 @@ <td align="left" colspan="5"><tt><b>ACL Info</b></tt></td> </tr> <tr bgcolor="#cccccc"> - <td align="left"><tt><b>Subject</b></tt></td> - <td align="left"><tt><b>Action</b></tt></td> + <td align="left"><tt><b>Principal</b></tt></td> + <td align="left"><tt><b>Privilege</b></tt></td> <td align="left"><tt><b>Inheritable</b></tt></td> <td align="left"><tt><b>Deny</b></tt></td> <td align="right"></td> @@ -145,10 +145,31 @@ <form action="" method="post"> <input type="hidden" name="uri" value="{@rdf:about}"/> <td align="left"> - <input name="permissonsubject" type="text" size="25" maxlength="40"/> + <input name="permissonprincipal" type="text" size="25" maxlength="40"/> </td> <td align="left"> - <input name="permissonaction" type="text" size="25" maxlength="40"/> + <select name="permissonprivilege"> + <option>all</option> + <option>read</option> + <option>write</option> + <option>read-acl</option> + <option>write-acl</option> + <option>read-source</option> + <option>create-source</option> + <option>remove-source</option> + <option>lock-source</option> + <option>read-locks</option> + <option>read-property</option> + <option>create-property</option> + <option>modify-property</option> + <option>remove-property</option> + <option>read-content</option> + <option>create-content</option> + <option>modify-content</option> + <option>remove-content</option> + <option>grant-permission</option> + <option>revoke-permission</option> + </select> </td> <td align="left"> <select name="permissoninheritable"> @@ -286,15 +307,15 @@ <xsl:template match="source:permission"> <tr bgcolor="#eeeeee"> - <td align="left"><tt><xsl:value-of select="@subjecturi"/></tt></td> - <td align="left"><tt><xsl:value-of select="@actionuri"/></tt></td> + <td align="left"><tt><xsl:value-of select="@principal"/></tt></td> + <td align="left"><tt><xsl:value-of select="@privilege"/></tt></td> <td align="left"><tt><xsl:value-of select="@inheritable"/></tt></td> <td align="left"><tt><xsl:value-of select="@negative"/></tt></td> <td align="right"> <form action="" method="post"> <input type="hidden" name="uri" value="{../../../../@uri}"/> - <input type="hidden" name="permissionsubject" value="{@subject}"/> - <input type="hidden" name="permissionsaction" value="{@action}"/> + <input type="hidden" name="permissionprincipal" value="{@subject}"/> + <input type="hidden" name="permissionprivilege" value="{@action}"/> <input type="submit" name="cocoon-action-deletepermission" value="Delete"/> </form> @@ -323,7 +344,7 @@ <xsl:template match="rdf:li" mode="enumerate"> <tr bgcolor="#eeeeee"> <td align="left">   - <a href="/cocoon/samples/slide/browse/{substring-after(@rdf:resource,'://')}" + <a href="/cocoon/mount/slide/browse/{substring-after(@rdf:resource,'://')}" ><tt><xsl:value-of select="@rdf:resource"/></tt></a> </td> <xsl:variable name="location"><xsl:value-of select="@rdf:resource"/></xsl:variable> @@ -343,7 +364,7 @@ <!-- <xsl:template match="rdf:Description" mode="enumerate"> <tr bgcolor="#eeeeee"> <td align="left">   - <a href="/cocoon/samples/slide/browse/{source:uri}"><tt><xsl:value-of select="source:uri"/></tt></a> + <a href="/cocoon/mount/slide/browse/{source:uri}"><tt><xsl:value-of select="source:uri"/></tt></a> </td> <td align="left"><tt></tt></td> <td align="left"><tt><xsl:value-of select="dav:getcontentlength"/></tt></td> 1.2 +5 -5 xml-cocoon2/src/scratchpad/webapp/samples/slide/slide.xconf Index: slide.xconf =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/slide.xconf,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- slide.xconf 1 Jul 2002 15:09:21 -0000 1.1 +++ slide.xconf 1 Jul 2002 16:41:55 -0000 1.2 @@ -63,7 +63,7 @@ <!-- Paths configuration --> <userspath>/users</userspath> - <guestpath>guest</guestpath> + <guestpath>/users/anonymous</guestpath> <filespath>/files</filespath> <parameter name="dav">true</parameter> <parameter name="standalone">true</parameter> @@ -96,7 +96,7 @@ <!-- /users --> <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users"> <permission action="/actions" subject="~"/> - <permission action="/actions" subject="/users/guest" inheritable="true" negative="true"/> + <permission action="/actions" subject="/users/anonymous" inheritable="true" negative="true"/> <permission action="/actions/read" subject="/users" inheritable="false"/> <!-- Permission group example --> @@ -124,7 +124,7 @@ </objectnode> <!-- /users/guest represents an authenticated or unauthenticated guest user --> - <objectnode classname="slideroles.basic.GuestRoleImpl" uri="/users/guest"> + <objectnode classname="slideroles.basic.GuestRoleImpl" uri="/users/anonymous"> <revision> <property name="password"/> </revision> @@ -138,9 +138,9 @@ </objectnode> <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/files"> - <permission action="/actions" subject="/users/guest"/> + <permission action="/actions" subject="/users/anonymous"/> <permission action="/actions/manage" subject="/users/john"/> - <permission action="/actions/write" subject="+/users/groupA"/> + <permission action="/actions/write" subject="/users/groupA"/> <permission action="/actions/read" subject="nobody"/> </objectnode> </objectnode>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]