You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by st...@apache.org on 2002/07/01 18:41:55 UTC
cvs commit: xml-cocoon2/src/scratchpad/webapp/samples/slide rdf2html.xsl slide.xconf
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: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org