Author: bpapez
Date: Fri Nov  9 14:28:00 2007
New Revision: 19105

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19105&repname=
=3Djahia
Log:
refactor checkWriteAccess to rather iterate through child ACLs than child p=
ages

Modified:
    trunk/core/src/java/org/jahia/content/ContentObject.java

Modified: trunk/core/src/java/org/jahia/content/ContentObject.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/content/ContentObject.java&rev=3D19105&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/content/ContentObject.java (original)
+++ trunk/core/src/java/org/jahia/content/ContentObject.java Fri Nov  9 14:=
28:00 2007
@@ -753,12 +753,12 @@
         try {
             JahiaBaseACL localAcl =3D getACL();
             result =3D localAcl.getPermission (user, permission);
-            if(!result&& checkChilds) {
+            if (!result && checkChilds) {
                 List childs =3D getChilds(user, null);
-                for (int i =3D 0; i < childs.size() && !result; i++) {
-                    ContentObject contentObject =3D (ContentObject) childs=
.get(i);
+                for (Iterator it =3D childs.iterator(); it.hasNext() && !r=
esult;) {
+                    ContentObject contentObject =3D (ContentObject) it.nex=
t();
                     if(!(contentObject instanceof ContentPage))
-                    result =3D contentObject.checkAccess(user, permission,=
checkChilds);
+                        result =3D contentObject.checkAccess(user, permiss=
ion, checkChilds);
                 }
             }
         } catch (JahiaException ex) {
@@ -775,17 +775,13 @@
      * @return Return true if the user has the specified access to the spe=
cified
      * object, or false in any other case.
      */
-    public boolean checkAccess(JahiaUser user, int permission, boolean che=
ckChilds,boolean forceChildRights) {
+    public boolean checkAccess(JahiaUser user, int permission, boolean che=
ckChilds, boolean forceChildRights) {
         boolean result =3D false;
         try {
             JahiaBaseACL acl =3D getACL();
             result =3D acl.getPermission (user, permission);
-            if(result && forceChildRights) {
-                List childs =3D getChilds(user, Jahia.getThreadParamBean()=
.getEntryLoadRequest());
-                for (int i =3D 0; i < childs.size() && result; i++) {
-                    ContentObject contentObject =3D (ContentObject) childs=
.get(i);
-                    result =3D contentObject.checkAccess(user, permission,=
checkChilds,forceChildRights);
-                }
+            if (result && forceChildRights) {
+                result =3D checkAllChildPermissionsPositive(user, permissi=
on, acl.getID());            =

             }
         } catch (JahiaException ex) {
             logger.debug("Cannot load ACL ID " + getAclID(), ex);
@@ -793,6 +789,21 @@
         return result;
     }
 =

+    private boolean checkAllChildPermissionsPositive(JahiaUser user,
+            int permission, int parentAclId) {
+        boolean result =3D true;
+        List childs =3D ServicesRegistry.getInstance()
+                .getJahiaACLManagerService().getChildAcls(parentAclId);
+        for (Iterator it =3D childs.iterator(); it.hasNext() && result;) {
+            JahiaAcl childAcl =3D (JahiaAcl) it.next();
+            result =3D childAcl.getPermission(user, permission);
+            if (result) {
+                result =3D checkAllChildPermissionsPositive(user, permissi=
on,
+                        childAcl.getAclID());
+            }
+        }
+        return result;
+    }
     /**
      * This method is used to determine if all the active entries of this
      * field will be deleted once this object is activated.
@@ -861,16 +872,14 @@
         Set languageCodes =3D new HashSet();
 =

         // first let's get all the active languages into the set.
-        for (int i=3D0; i<activeEntryStates.size(); i++)
-        {
-            ContentObjectEntryState entryState =3D (ContentObjectEntryStat=
e)activeEntryStates.get(i);
+        for (Iterator it =3D activeEntryStates.iterator(); it.hasNext();) =
{        =

+            ContentObjectEntryState entryState =3D (ContentObjectEntryStat=
e)it.next();
             languageCodes.add(entryState.getLanguageCode());
         }
 =

         // now let's remove all the languages that are flagged for deletio=
n.
-        for (int i=3D0; i<stagedEntryStates.size(); i++)
-        {
-            ContentObjectEntryState entryState =3D (ContentObjectEntryStat=
e)stagedEntryStates.get(i);
+        for (Iterator it =3D stagedEntryStates.iterator(); it.hasNext();) =
{        =

+            ContentObjectEntryState entryState =3D (ContentObjectEntryStat=
e)it.next();
             if (entryState.getVersionID() =3D=3D -1) {
                 if (activationLanguageCodes =3D=3D null ) {
                     languageCodes.remove(entryState.getLanguageCode());
@@ -925,10 +934,9 @@
         throws JahiaException {
 =

         ArrayList childs =3D this.getChilds(user,null);
-        int size =3D childs.size();
         ContentObject contentObject =3D null;
-        for ( int i=3D0 ; i<size; i++ ){
-            contentObject =3D (ContentObject)childs.get(i);
+        for (Iterator it =3D childs.iterator(); it.hasNext();) {        =

+            contentObject =3D (ContentObject)it.next();
             if (  !contentObject.willBeCompletelyDeleted(markDeletedLangua=
geCode,
                                                          activationLanguag=
eCodes) ){
                 return false;
@@ -1096,11 +1104,9 @@
         ArrayList entryStates =3D
                 this.getClosestVersionedEntryStates(versionID);
 =

-        int size =3D entryStates.size();
-
         ContentObjectEntryState entryState =3D null;
-        for ( int i=3D0 ; i<size; i++ ){
-            entryState =3D (ContentObjectEntryState)entryStates.get(i);
+        for (Iterator it =3D entryStates.iterator(); it.hasNext();) {     =
   =

+            entryState =3D (ContentObjectEntryState)it.next();
             if ( entryState.getWorkflowState() !=3D
                  ContentObjectEntryState.WORKFLOW_STATE_VERSIONING_DELETED=
 ){
                 return false;
@@ -1118,13 +1124,12 @@
     public boolean isDeleted(int versionID) throws JahiaException{
         ArrayList entryStates =3D
                 this.getClosestVersionedEntryStates(versionID);
-        int size =3D entryStates.size();
-        if (size =3D=3D 0) {
+        if (entryStates.isEmpty()) {
             return false;
         }
         ContentObjectEntryState entryState =3D null;
-        for ( int i=3D0 ; i<size; i++ ){
-            entryState =3D (ContentObjectEntryState)entryStates.get(i);
+        for (Iterator it =3D entryStates.iterator(); it.hasNext();) {     =
   =

+            entryState =3D (ContentObjectEntryState)it.next();
             if ( entryState.getWorkflowState() !=3D
                  ContentObjectEntryState.WORKFLOW_STATE_VERSIONING_DELETED=
 ){
                 return false;
@@ -1681,9 +1686,8 @@
                 logger.debug("Error preloading metadatas for object " + ob=
jectKey,t);
             }
         }
-
-        for ( int i=3D0 ; i<ids.size(); i++ ){
-            id =3D (Integer)ids.get(i);
+        for (Iterator it =3D ids.iterator(); it.hasNext();) {
+            id =3D (Integer)it.next();
             try {
                 contentField =3D ContentField.getField(id.intValue());
                 if ( contentField !=3D null ){
@@ -1738,8 +1742,8 @@
     public Set getPickerObjects(String type) throws JahiaException {
         HashSet set =3D new HashSet();
         List links =3D linkManager.findByTypeAndLeftObjectKey(type,this.ge=
tObjectKey());
-        for ( int i=3D0 ; i<links.size(); i++ ){
-            ObjectLink link =3D (ObjectLink)links.get(i);
+        for (Iterator it =3D links.iterator(); it.hasNext();) {        =

+            ObjectLink link =3D (ObjectLink)it.next();
             try {
                 ContentObject picker =3D (ContentObject) ContentObject.get=
Instance(link.getRightObjectKey());
                 if (picker !=3D null && !picker.isMarkedForDelete() && !pi=
cker.isDeleted(new Long(System.currentTimeMillis()/1000).intValue())) {
@@ -1777,8 +1781,8 @@
 =

         if(pickedObjectType=3D=3Dnull) {
             List links =3D linkManager.findByTypeAndRightObjectKey(type,th=
is.getObjectKey());
-            for ( int i=3D0 ; i<links.size(); i++ ){
-                ObjectLink link =3D (ObjectLink)links.get(i);
+            for (Iterator it =3D links.iterator(); it.hasNext();) {       =
     =

+                ObjectLink link =3D (ObjectLink)it.next();
                 try {
                     pickedObject =3D (ContentObject) ContentObject.getInst=
ance(link.getLeftObjectKey());
                     pickedObjectType =3D type;
@@ -2008,8 +2012,8 @@
         try {
             List childs =3D getChilds(user, Jahia.getThreadParamBean().get=
EntryLoadRequest());
             WorkflowService service =3D ServicesRegistry.getInstance().get=
WorkflowService();
-            for (int i =3D 0; i < childs.size() && result; i++) {
-                ContentObject contentObject =3D (ContentObject) childs.get=
(i);
+            for (Iterator it =3D childs.iterator(); it.hasNext() && result=
;) {            =

+                ContentObject contentObject =3D (ContentObject) it.next();
                 if (service.getWorkflowMode(contentObject) =3D=3D Workflow=
Service.EXTERNAL) {
                     final String name =3D service.getInheritedExternalWork=
flowName(contentObject);
                     if(name =3D=3D null) {

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to