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