Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 20171 invoked by uid 500); 19 Aug 2002 14:06:51 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 20162 invoked by uid 500); 19 Aug 2002 14:06:51 -0000 Delivered-To: apmail-xml-cocoon2-cvs@apache.org Date: 19 Aug 2002 14:06:50 -0000 Message-ID: <20020819140650.231.qmail@icarus.apache.org> From: stephan@apache.org To: xml-cocoon2-cvs@apache.org Subject: cvs commit: xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting SourceMultiAction.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N stephan 2002/08/19 07:06:50 Modified: src/scratchpad/webapp/samples/slide description2html4permissions.xsl src/scratchpad/src/org/apache/cocoon/components/source/impl SlideSource.java src/scratchpad/src/org/apache/cocoon/components/source RestrictableSource.java src/scratchpad/src/org/apache/cocoon/acting SourceMultiAction.java Log: Complete the implementation of the AddSourcePermission and RemoveSourcePermission. Revision Changes Path 1.5 +13 -9 xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4permissions.xsl Index: description2html4permissions.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4permissions.xsl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- description2html4permissions.xsl 19 Aug 2002 08:08:11 -0000 1.4 +++ description2html4permissions.xsl 19 Aug 2002 14:06:50 -0000 1.5 @@ -148,12 +148,14 @@
- + + + - +
@@ -161,10 +163,10 @@
- + - @@ -210,7 +212,7 @@ - +
@@ -256,12 +258,14 @@
- + + + - +
@@ -269,7 +273,7 @@
- + - +
1.19 +138 -15 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- SlideSource.java 19 Aug 2002 11:49:41 -0000 1.18 +++ SlideSource.java 19 Aug 2002 14:06:50 -0000 1.19 @@ -846,13 +846,13 @@ } /** - * Set a permission to this source + * Add 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 { + public void addSourcePermission(SourcePermission sourcepermission) throws SourceException { NamespaceConfig config = this.nat.getNamespaceConfig(); @@ -860,13 +860,15 @@ if (sourcepermission instanceof PrincipalSourcePermission) { subject = config.getUsersPath()+"/"+((PrincipalSourcePermission)sourcepermission).getPrincipal(); - // Test if user exists + // Test if principal exists try { ObjectNode objectnode = structure.retrieve(this.slideToken, subject); if (!(objectnode instanceof SubjectNode)) - return; - } catch (SlideException e) { - return; + throw new SourceException("Principal '"+ + ((PrincipalSourcePermission)sourcepermission).getPrincipal()+"' doesn't exists"); + } catch (SlideException se) { + throw new SourceException("Could not retrieve object for principal '"+ + ((PrincipalSourcePermission)sourcepermission).getPrincipal()+"'", se); } } else if (sourcepermission instanceof GroupSourcePermission) { @@ -876,14 +878,16 @@ try { ObjectNode objectnode = structure.retrieve(this.slideToken, subject); if (!(objectnode instanceof GroupNode)) - return; - } catch (SlideException e) { - return; + throw new SourceException("Group '"+ + ((GroupSourcePermission)sourcepermission).getGroup()+"' doesn't exists"); + } catch (SlideException se) { + throw new SourceException("Could not retrieve object for group '"+ + ((GroupSourcePermission)sourcepermission).getGroup()+"'", se); } subject = "+"+subject; // Additional '+' to expand the group } else - return; // If not user or group + throw new SourceException("Does't support category of permission"); boolean negative = sourcepermission.isNegative(); boolean inheritable = sourcepermission.isInheritable(); @@ -944,7 +948,7 @@ } /** - * Add permission to the list of permissions to set. + * Add permission to the list of permissions. */ private void addPermission(String subject, String action, boolean negative, boolean inheritable) throws SourceException { @@ -959,7 +963,128 @@ content.store(slideToken, this.config.getFilesPath()+this.uri, revisionDescriptor, null); } catch (SlideException se) { - getLogger().warn("Couldn't grant permission", se); + throw new SourceException("Couldn't grant permission", se); + } + } + + /** + * Remove a permission from this source + * + * @param sourcepermission Permission, which should be removed + * + * @throws SourceException If an exception occurs during this operation + **/ + public void removeSourcePermission(SourcePermission sourcepermission) throws SourceException { + + NamespaceConfig config = this.nat.getNamespaceConfig(); + + String subject = null; + if (sourcepermission instanceof PrincipalSourcePermission) { + subject = config.getUsersPath()+"/"+((PrincipalSourcePermission)sourcepermission).getPrincipal(); + + // Test if principal exists + try { + ObjectNode objectnode = structure.retrieve(this.slideToken, subject); + if (!(objectnode instanceof SubjectNode)) + throw new SourceException("Principal '"+ + ((PrincipalSourcePermission)sourcepermission).getPrincipal()+"' doesn't exists"); + } catch (SlideException se) { + throw new SourceException("Could not retrieve object for principal '"+ + ((PrincipalSourcePermission)sourcepermission).getPrincipal()+"'", se); + } + + } else if (sourcepermission instanceof GroupSourcePermission) { + subject = config.getUsersPath()+"/"+((GroupSourcePermission)sourcepermission).getGroup(); + + // Test if group exists + try { + ObjectNode objectnode = structure.retrieve(this.slideToken, subject); + if (!(objectnode instanceof GroupNode)) + throw new SourceException("Group '"+ + ((GroupSourcePermission)sourcepermission).getGroup()+"' doesn't exists"); + } catch (SlideException se) { + throw new SourceException("Could not retrieve object for group '"+ + ((GroupSourcePermission)sourcepermission).getGroup()+"'", se); + } + + subject = "+"+subject; // Additional '+' to expand the group + } else + throw new SourceException("Does't support category of permission"); + + boolean negative = sourcepermission.isNegative(); + boolean inheritable = sourcepermission.isInheritable(); + + if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_ALL)) { + removePermission(subject, "/", negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ)) { + removePermission(subject, config.getReadObjectAction().getUri(), negative, inheritable); + removePermission(subject, config.getReadLocksAction().getUri(), negative, inheritable); + removePermission(subject, config.getReadRevisionMetadataAction().getUri(), negative, inheritable); + removePermission(subject, config.getReadRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_SOURCE)) { + removePermission(subject, config.getReadObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_LOCKS)) { + removePermission(subject, config.getReadLocksAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_PROPERTY)) { + removePermission(subject, config.getReadRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_CONTENT)) { + removePermission(subject, config.getReadRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE)) { + removePermission(subject, config.getCreateObjectAction().getUri(), negative, inheritable); + removePermission(subject, config.getRemoveObjectAction().getUri(), negative, inheritable); + removePermission(subject, config.getLockObjectAction().getUri(), negative, inheritable); + removePermission(subject, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable); + removePermission(subject, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable); + removePermission(subject, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable); + removePermission(subject, config.getCreateRevisionContentAction().getUri(), negative, inheritable); + removePermission(subject, config.getModifyRevisionContentAction().getUri(), negative, inheritable); + removePermission(subject, config.getRemoveRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_SOURCE)) { + removePermission(subject, config.getCreateObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_SOURCE)) { + removePermission(subject, config.getRemoveObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_LOCK_SOURCE)) { + removePermission(subject, config.getLockObjectAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_PROPERTY)) { + removePermission(subject, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_PROPERTY)) { + removePermission(subject, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_PROPERTY)) { + removePermission(subject, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_CONTENT)) { + removePermission(subject, config.getCreateRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_CONTENT)) { + removePermission(subject, config.getModifyRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_CONTENT)) { + removePermission(subject, config.getRemoveRevisionContentAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_ACL)) { + removePermission(subject, config.getReadPermissionsAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE_ACL)) { + removePermission(subject, config.getGrantPermissionAction().getUri(), negative, inheritable); + removePermission(subject, config.getRevokePermissionAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_GRANT_PERMISSION)) { + removePermission(subject, config.getGrantPermissionAction().getUri(), negative, inheritable); + } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REVOKE_PERMISSION)) { + removePermission (subject, config.getRevokePermissionAction().getUri(), negative, inheritable); + } + } + + /** + * Remove a permission from the list of permissions. + */ + private void removePermission(String subject, String action, + boolean negative, boolean inheritable) throws SourceException { + try { + NodePermission permission = new NodePermission + (this.config.getFilesPath()+this.uri, subject, action, inheritable, negative); + this.security.revokePermission(this.slideToken, permission); + + // Last modification date + revisionDescriptor.setLastModified(new Date()); + + content.store(slideToken, this.config.getFilesPath()+this.uri, revisionDescriptor, null); + + } catch (SlideException se) { throw new SourceException("Couldn't grant permission", se); } } @@ -1206,7 +1331,6 @@ 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); } @@ -1223,7 +1347,6 @@ 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.5 +13 -4 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.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- RestrictableSource.java 1 Jul 2002 16:41:54 -0000 1.4 +++ RestrictableSource.java 19 Aug 2002 14:06:50 -0000 1.5 @@ -80,13 +80,22 @@ public void setSourceCredential(SourceCredential sourcecredential) throws SourceException; /** - * Set a permission to this source + * Add 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; + **/ + public void addSourcePermission(SourcePermission sourcepermission) throws SourceException; + + /** + * Remove a permission from this source + * + * @param sourcepermission Permission, which should be removed + * + * @throws SourceException If an exception occurs during this operation + **/ + public void removeSourcePermission(SourcePermission sourcepermission) throws SourceException; /** * Returns a list of the existing permissions 1.9 +103 -5 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/SourceMultiAction.java Index: SourceMultiAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/SourceMultiAction.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- SourceMultiAction.java 19 Aug 2002 08:01:50 -0000 1.8 +++ SourceMultiAction.java 19 Aug 2002 14:06:50 -0000 1.9 @@ -351,7 +351,7 @@ return EMPTY_MAP; } - public Map doSetPrincipalPermission(Redirector redirector, + public Map doAddPrincipalPermission(Redirector redirector, SourceResolver resolver, Map objectModel, String src, @@ -388,7 +388,7 @@ SourcePermission permission = new PrincipalSourcePermission(subject, privilege, inheritable, negative); - restrictablesource.setSourcePermission(permission); + restrictablesource.addSourcePermission(permission); } else throw new ProcessingException("Source isn't restrictable"); } catch (SourceException se) { @@ -400,7 +400,56 @@ return EMPTY_MAP; } - public Map doSetPrincipalGroupPermission(Redirector redirector, + public Map doRemovePrincipalPermission(Redirector redirector, + SourceResolver resolver, + Map objectModel, + String src, + Parameters parameters) throws Exception { + + getLogger().debug("remove principal permission called"); + + Request request = ObjectModelHelper.getRequest(objectModel); + + String uri = parameters.getParameter(SOURCE_URI, request.getParameter(SOURCE_URI)); + String subject = parameters.getParameter(SOURCE_PERMISSION_PRINCIPAL, + request.getParameter(SOURCE_PERMISSION_PRINCIPAL)); + String privilege = parameters.getParameter(SOURCE_PERMISSION_PRIVILEGE, + request.getParameter(SOURCE_PERMISSION_PRIVILEGE)); + boolean inheritable = Boolean.getBoolean(parameters.getParameter(SOURCE_PERMISSION_INHERITABLE, + request.getParameter(SOURCE_PERMISSION_INHERITABLE))); + boolean negative = Boolean.getBoolean(parameters.getParameter(SOURCE_PERMISSION_NEGATIVE, + request.getParameter(SOURCE_PERMISSION_NEGATIVE))); + + String principal = parameters.getParameter(PRINCIPAL, + request.getParameter(PRINCIPAL)); + String password = parameters.getParameter(PASSWORD, + request.getParameter(PASSWORD)); + + try { + + Source source = resolver.resolveURI(uri); + + if (source instanceof RestrictableSource) { + RestrictableSource restrictablesource = (RestrictableSource)source; + + restrictablesource.setSourceCredential(new SourceCredential(principal, password)); + + SourcePermission permission = + new PrincipalSourcePermission(subject, privilege, inheritable, negative); + + restrictablesource.removeSourcePermission(permission); + } else + throw new ProcessingException("Source isn't restrictable"); + } catch (SourceException se) { + if (getLogger().isDebugEnabled()) + getLogger().debug("Exception occurs while modifying the source", se); + throw new ProcessingException("Exception occurs while modifying the source", se); + } + + return EMPTY_MAP; + } + + public Map doAddPrincipalGroupPermission(Redirector redirector, SourceResolver resolver, Map objectModel, String src, @@ -437,7 +486,56 @@ SourcePermission permission = new GroupSourcePermission(subject, privilege, inheritable, negative); - restrictablesource.setSourcePermission(permission); + restrictablesource.addSourcePermission(permission); + } else + throw new ProcessingException("Source isn't restrictable"); + } catch (SourceException se) { + if (getLogger().isDebugEnabled()) + getLogger().debug("Exception occurs while modifying the source", se); + throw new ProcessingException("Exception occurs while modifying the source", se); + } + + return EMPTY_MAP; + } + + public Map doRemovePrincipalGroupPermission(Redirector redirector, + SourceResolver resolver, + Map objectModel, + String src, + Parameters parameters) throws Exception { + + getLogger().debug("remove principal group permission called"); + + Request request = ObjectModelHelper.getRequest(objectModel); + + String uri = parameters.getParameter(SOURCE_URI, request.getParameter(SOURCE_URI)); + String subject = parameters.getParameter(SOURCE_PERMISSION_PRINCIPAL_GROUP, + request.getParameter(SOURCE_PERMISSION_PRINCIPAL_GROUP)); + String privilege = parameters.getParameter(SOURCE_PERMISSION_PRIVILEGE, + request.getParameter(SOURCE_PERMISSION_PRIVILEGE)); + boolean inheritable = Boolean.getBoolean(parameters.getParameter(SOURCE_PERMISSION_INHERITABLE, + request.getParameter(SOURCE_PERMISSION_INHERITABLE))); + boolean negative = Boolean.getBoolean(parameters.getParameter(SOURCE_PERMISSION_NEGATIVE, + request.getParameter(SOURCE_PERMISSION_NEGATIVE))); + + String principal = parameters.getParameter(PRINCIPAL, + request.getParameter(PRINCIPAL)); + String password = parameters.getParameter(PASSWORD, + request.getParameter(PASSWORD)); + + try { + + Source source = resolver.resolveURI(uri); + + if (source instanceof RestrictableSource) { + RestrictableSource restrictablesource = (RestrictableSource)source; + + restrictablesource.setSourceCredential(new SourceCredential(principal, password)); + + SourcePermission permission = + new GroupSourcePermission(subject, privilege, inheritable, negative); + + restrictablesource.removeSourcePermission(permission); } else throw new ProcessingException("Source isn't restrictable"); } catch (SourceException se) { ---------------------------------------------------------------------- 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