Index: src/share/org/apache/slide/security/SecurityImpl.java =================================================================== RCS file: /home/cvspublic/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v --- src/share/org/apache/slide/security/SecurityImpl.java 1.55 +++ src/share/org/apache/slide/security/SecurityImpl.java @@ -146,1 +146,1 @@ - AccessDeniedException { --- + AccessDeniedException, VetoException { @@ -155,0 +155,10 @@ + + // Diff permissions + Enumeration oldPermissions = + objectUri.getStore().enumeratePermissions(objectUri); + Vector oldPermissionVector = new Vector(); + while ( oldPermissions.hasMoreElements() ) + oldPermissionVector.add(oldPermissions.nextElement()); + Vector newPermissionVector = new Vector(); + while (permissions.hasMoreElements()) + newPermissionVector.add(permissions.nextElement()); @@ -156,0 +166,6 @@ + Vector removedPermissions = new Vector(oldPermissionVector); + removedPermissions.removeAll(newPermissionVector); + Vector addedPermissions = new Vector(newPermissionVector); + addedPermissions.removeAll(oldPermissionVector); + + // Set permissions @@ -158,0 +174,1 @@ + permissions = newPermissionVector.elements(); @@ -164,0 +181,20 @@ + // Fire events + permissions = removedPermissions.elements(); + while ( permissions.hasMoreElements() ) + { + NodePermission permission = + (NodePermission)permissions.nextElement(); + if ( SecurityEvent.REVOKE_PERMISSION.isEnabled() ) EventDispatcher.getInstance().fireVetoableEvent(SecurityEvent.REVOKE_PERMISSION, new SecurityEvent(this, token, namespace, objectUri, permission)); + } + permissions = addedPermissions.elements(); + while ( permissions.hasMoreElements() ) + { + NodePermission permission = + (NodePermission)permissions.nextElement(); + if ( permission.isNegative() ) { + if ( SecurityEvent.DENY_PERMISSION.isEnabled() ) EventDispatcher.getInstance().fireVetoableEvent(SecurityEvent.DENY_PERMISSION, new SecurityEvent(this, token, namespace, objectUri, permission)); + } else { + if ( SecurityEvent.GRANT_PERMISSION.isEnabled() ) EventDispatcher.getInstance().fireVetoableEvent(SecurityEvent.GRANT_PERMISSION, new SecurityEvent(this, token, namespace, objectUri, permission)); + } + + }