Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.security/src')
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Directory.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Group.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/PermissionFilter.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Role.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/User.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassFilterImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassPermissionImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CombinedFilterImpl.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/DerivedList.java (renamed from plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CachedList.java)23
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ExpressionFilterImpl.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/FilterPermissionImpl.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/GroupImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/LinkedFilterImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackageFilterImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackagePermissionImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PermissionImpl.java49
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/RealmImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourceFilterImpl.java131
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourcePermissionImpl.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/UserImpl.java8
20 files changed, 226 insertions, 127 deletions
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Directory.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Directory.java
index 011deb9440..bddd41d7d5 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Directory.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Directory.java
@@ -35,6 +35,21 @@ import org.eclipse.emf.common.util.EList;
public interface Directory extends SecurityItem, SecurityItemContainer
{
/**
+ * @since 4.3
+ */
+ public static final String ROLES = "Roles";
+
+ /**
+ * @since 4.3
+ */
+ public static final String GROUPS = "Groups";
+
+ /**
+ * @since 4.3
+ */
+ public static final String USERS = "Users";
+
+ /**
* Returns the value of the '<em><b>Items</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.emf.cdo.security.SecurityItem}.
* <!-- begin-user-doc -->
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Group.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Group.java
index 09d295b23e..6a7b674cf0 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Group.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Group.java
@@ -38,6 +38,11 @@ import org.eclipse.emf.common.util.EList;
public interface Group extends Assignee
{
/**
+ * @since 4.3
+ */
+ public static final String ADMINISTRATORS = "Administrators";
+
+ /**
* Returns the value of the '<em><b>Users</b></em>' reference list.
* The list contents are of type {@link org.eclipse.emf.cdo.security.User}.
* It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.security.User#getGroups <em>Groups</em>}'.
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/PermissionFilter.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/PermissionFilter.java
index 7fddda83c4..abc7c8122a 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/PermissionFilter.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/PermissionFilter.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
/**
* <!-- begin-user-doc -->
@@ -32,6 +33,8 @@ public interface PermissionFilter extends CDOObject
boolean isApplicable(CDORevision revision, CDORevisionProvider revisionProvider, CDOBranchPoint securityContext,
int level) throws Exception;
+ boolean isImpacted(CommitImpactContext context);
+
String format();
} // PermissionFilter
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Role.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Role.java
index 8043046ae4..7f14079d72 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Role.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/Role.java
@@ -35,6 +35,31 @@ import org.eclipse.emf.common.util.EList;
public interface Role extends SecurityItem
{
/**
+ * @since 4.3
+ */
+ public static final String ADMINISTRATION = "Administration";
+
+ /**
+ * @since 4.3
+ */
+ public static final String RESOURCE_TREE_WRITER = "Resource Tree Writer";
+
+ /**
+ * @since 4.3
+ */
+ public static final String RESOURCE_TREE_READER = "Resource Tree Reader";
+
+ /**
+ * @since 4.3
+ */
+ public static final String ALL_OBJECTS_WRITER = "All Objects Writer";
+
+ /**
+ * @since 4.3
+ */
+ public static final String ALL_OBJECTS_READER = "All Objects Reader";
+
+ /**
* Returns the value of the '<em><b>Assignees</b></em>' reference list.
* The list contents are of type {@link org.eclipse.emf.cdo.security.Assignee}.
* It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.security.Assignee#getRoles <em>Roles</em>}'.
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/User.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/User.java
index 221815d0aa..0361c9148d 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/User.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/User.java
@@ -45,6 +45,11 @@ import org.eclipse.emf.common.util.EList;
public interface User extends Assignee
{
/**
+ * @since 4.3
+ */
+ public static final String ADMINISTRATOR = "Administrator";
+
+ /**
* Returns the value of the '<em><b>Groups</b></em>' reference list.
* The list contents are of type {@link org.eclipse.emf.cdo.security.Group}.
* It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.security.Group#getUsers <em>Users</em>}'.
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassFilterImpl.java
index e0503fbded..6ee35dba51 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassFilterImpl.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.security.ClassFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.ecore.EClass;
@@ -111,6 +112,11 @@ public class ClassFilterImpl extends PermissionFilterImpl implements ClassFilter
return applicableClass == actualClass;
}
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return false;
+ }
+
public String format()
{
String label = "?";
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassPermissionImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassPermissionImpl.java
index d115cb6d8a..3383a00258 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassPermissionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ClassPermissionImpl.java
@@ -82,4 +82,10 @@ public class ClassPermissionImpl extends PermissionImpl implements ClassPermissi
return actualClass == applicableClass;
}
+ @Override
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return false;
+ }
+
} // ClassPermissionImpl
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CombinedFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CombinedFilterImpl.java
index 0a88182114..840c595588 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CombinedFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CombinedFilterImpl.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.security.impl;
import org.eclipse.emf.cdo.security.CombinedFilter;
import org.eclipse.emf.cdo.security.PermissionFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
@@ -67,6 +68,19 @@ public abstract class CombinedFilterImpl extends PermissionFilterImpl implements
return (EList<PermissionFilter>)eGet(SecurityPackage.Literals.COMBINED_FILTER__OPERANDS, true);
}
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ for (PermissionFilter operand : getOperands())
+ {
+ if (operand.isImpacted(context))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
public String format()
{
StringBuilder builder = new StringBuilder();
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CachedList.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/DerivedList.java
index 4b9aa265b3..14df3b5f97 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/CachedList.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/DerivedList.java
@@ -17,7 +17,6 @@ import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.util.EcoreEList;
import org.eclipse.emf.ecore.util.InternalEList;
-import java.lang.ref.SoftReference;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
@@ -28,30 +27,18 @@ import java.util.Set;
/**
* @author Eike Stepper
*/
-abstract class CachedList<E extends EObject> implements InternalEList<E>, EStructuralFeature.Setting
+abstract class DerivedList<E extends EObject> implements InternalEList<E>, EStructuralFeature.Setting
{
- private SoftReference<Object[]> cache;
-
- protected CachedList()
+ protected DerivedList()
{
}
private InternalEList<E> getList()
{
- Object[] data = null;
- if (cache != null)
- {
- data = cache.get();
- }
-
- if (data == null)
- {
- data = getData();
- cache = new SoftReference<Object[]>(data);
- }
-
InternalEObject owner = getOwner();
EStructuralFeature feature = getFeature();
+ Object[] data = getData();
+
return new EcoreEList.UnmodifiableEList.FastCompare<E>(owner, feature, data.length, data);
}
@@ -321,7 +308,7 @@ abstract class CachedList<E extends EObject> implements InternalEList<E>, EStruc
/**
* @author Eike Stepper
*/
- static abstract class RecursionSafe<E extends EObject, O extends EObject> extends CachedList<E>
+ static abstract class RecursionSafe<E extends EObject, O extends EObject> extends DerivedList<E>
{
protected RecursionSafe()
{
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ExpressionFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ExpressionFilterImpl.java
index db7bda9a84..9701fa2776 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ExpressionFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ExpressionFilterImpl.java
@@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.expressions.Expression;
import org.eclipse.emf.cdo.expressions.impl.EvaluationContextImpl;
import org.eclipse.emf.cdo.security.ExpressionFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.ecore.EClass;
@@ -86,6 +87,12 @@ public class ExpressionFilterImpl extends ObjectFilterImpl implements Expression
return (Boolean)expression.evaluate(evaluationContext);
}
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ // TODO Implement impact analysis in the expression model
+ return true;
+ }
+
public String format()
{
Expression expression = getExpression();
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/FilterPermissionImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/FilterPermissionImpl.java
index f526a6ad88..ba81320db1 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/FilterPermissionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/FilterPermissionImpl.java
@@ -103,4 +103,18 @@ public class FilterPermissionImpl extends PermissionImpl implements FilterPermis
return true;
}
+ @Override
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ for (PermissionFilter filter : getFilters())
+ {
+ if (filter.isImpacted(context))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
} // FilterPermissionImpl
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/GroupImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/GroupImpl.java
index 961e050b8f..3d6f3ad4fd 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/GroupImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/GroupImpl.java
@@ -42,7 +42,7 @@ import java.util.Set;
*/
public class GroupImpl extends AssigneeImpl implements Group
{
- private EList<Group> allInheritedGroups = new CachedList.RecursionSafe<Group, Group>()
+ private EList<Group> allInheritedGroups = new DerivedList.RecursionSafe<Group, Group>()
{
@Override
protected InternalEObject getOwner()
@@ -71,7 +71,7 @@ public class GroupImpl extends AssigneeImpl implements Group
}
};
- private EList<Group> allInheritingGroups = new CachedList.RecursionSafe<Group, Group>()
+ private EList<Group> allInheritingGroups = new DerivedList.RecursionSafe<Group, Group>()
{
@Override
protected InternalEObject getOwner()
@@ -100,7 +100,7 @@ public class GroupImpl extends AssigneeImpl implements Group
}
};
- private EList<Role> allRoles = new CachedList.RecursionSafe<Role, Group>()
+ private EList<Role> allRoles = new DerivedList.RecursionSafe<Role, Group>()
{
@Override
protected InternalEObject getOwner()
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/LinkedFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/LinkedFilterImpl.java
index 79168e6ca1..2f5d1cb2f3 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/LinkedFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/LinkedFilterImpl.java
@@ -16,6 +16,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.security.LinkedFilter;
import org.eclipse.emf.cdo.security.PermissionFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.ecore.EClass;
@@ -80,7 +81,14 @@ public class LinkedFilterImpl extends PermissionFilterImpl implements LinkedFilt
protected boolean filter(CDORevision revision, CDORevisionProvider revisionProvider, CDOBranchPoint securityContext,
int level) throws Exception
{
- return getFilter().isApplicable(revision, revisionProvider, securityContext, level + 1);
+ PermissionFilter filter = getFilter();
+ return filter.isApplicable(revision, revisionProvider, securityContext, level + 1);
+ }
+
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ PermissionFilter filter = getFilter();
+ return filter.isImpacted(context);
}
public String format()
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackageFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackageFilterImpl.java
index e709786507..5426c53e63 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackageFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackageFilterImpl.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.security.PackageFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
@@ -85,6 +86,11 @@ public class PackageFilterImpl extends PermissionFilterImpl implements PackageFi
return actualPackage == applicablePackage;
}
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return false;
+ }
+
public String format()
{
String label = "?";
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackagePermissionImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackagePermissionImpl.java
index 5cb2053909..e8ade3f45b 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackagePermissionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PackagePermissionImpl.java
@@ -83,4 +83,10 @@ public class PackagePermissionImpl extends PermissionImpl implements PackagePerm
return actualPackage == applicablePackage;
}
+ @Override
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return false;
+ }
+
} // PackagePermissionImpl
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PermissionImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PermissionImpl.java
index 28a8585dce..17d28faf4b 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PermissionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/PermissionImpl.java
@@ -10,6 +10,9 @@
*/
package org.eclipse.emf.cdo.security.impl;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.internal.security.PermissionUtil;
import org.eclipse.emf.cdo.security.Access;
import org.eclipse.emf.cdo.security.Permission;
@@ -115,4 +118,50 @@ public abstract class PermissionImpl extends CDOObjectImpl implements Permission
{
return PermissionUtil.getUser();
}
+
+ /**
+ * Should be overridden in subclasses to do proper impact analysis!
+ *
+ * @since 4.3
+ */
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return true;
+ }
+
+ /**
+ * @author Eike Stepper
+ * @since 4.3
+ */
+ public interface CommitImpactContext
+ {
+ /**
+ * Returns the revisions of the new objects of the current commit.
+ * <p>
+ * Read only!
+ */
+ public CDORevision[] getNewObjects();
+
+ /**
+ * Returns the revisions of the changed objects of the current commit.
+ * <p>
+ * Read only!
+ */
+ public CDORevision[] getDirtyObjects();
+
+ /**
+ * Returns the revision deltas of the changed objects of the current commit.
+ * <p>
+ * Read only!
+ */
+ public CDORevisionDelta[] getDirtyObjectDeltas();
+
+ /**
+ * Returns the CDOIDs of the detached objects of the current commit.
+ * <p>
+ * Read only!
+ */
+ public CDOID[] getDetachedObjects();
+ }
+
} // PermissionImpl
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/RealmImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/RealmImpl.java
index 162dae5728..ab97b36e88 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/RealmImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/RealmImpl.java
@@ -54,7 +54,7 @@ import org.eclipse.emf.ecore.InternalEObject;
*/
public class RealmImpl extends SecurityElementImpl implements Realm
{
- private EList<User> allUsers = new CachedList<User>()
+ private EList<User> allUsers = new DerivedList<User>()
{
@Override
protected InternalEObject getOwner()
@@ -76,7 +76,7 @@ public class RealmImpl extends SecurityElementImpl implements Realm
}
};
- private EList<Group> allGroups = new CachedList<Group>()
+ private EList<Group> allGroups = new DerivedList<Group>()
{
@Override
protected InternalEObject getOwner()
@@ -98,7 +98,7 @@ public class RealmImpl extends SecurityElementImpl implements Realm
}
};
- private EList<Role> allRoles = new CachedList<Role>()
+ private EList<Role> allRoles = new DerivedList<Role>()
{
@Override
protected InternalEObject getOwner()
@@ -120,7 +120,7 @@ public class RealmImpl extends SecurityElementImpl implements Realm
}
};
- private EList<Permission> allPermissions = new CachedList<Permission>()
+ private EList<Permission> allPermissions = new DerivedList<Permission>()
{
@Override
protected InternalEObject getOwner()
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourceFilterImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourceFilterImpl.java
index d401c68fa9..4651a79078 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourceFilterImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourceFilterImpl.java
@@ -16,11 +16,15 @@ import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.cdo.security.PatternStyle;
import org.eclipse.emf.cdo.security.ResourceFilter;
import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.security.impl.PermissionImpl.CommitImpactContext;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.WrappedException;
@@ -275,103 +279,10 @@ public class ResourceFilterImpl extends PermissionFilterImpl implements Resource
return this;
}
- // private boolean includesExactAndUp(CDORevision revision, CDORevisionProvider revisionProvider)
- // {
- // if (!revision.isResourceNode())
- // {
- // return false;
- // }
- //
- // String revisionPath = CDORevisionUtil.getResourceNodePath(revision, revisionProvider);
- // String path = getSubstitutedPath();
- //
- // int length = revisionPath.length();
- // if (length > path.length())
- // {
- // return false;
- // }
- //
- // path = path.substring(0, length);
- // return revisionPath.equals(path);
- // }
- //
- // private boolean includesExactAndDown(CDORevision revision, CDORevisionProvider revisionProvider)
- // {
- // String revisionPath = CDORevisionUtil.getResourceNodePath(revision, revisionProvider);
- // String path = getSubstitutedPath();
- //
- // int length = path.length();
- // if (length > revisionPath.length())
- // {
- // return false;
- // }
- //
- // revisionPath = revisionPath.substring(0, length);
- // return path.equals(revisionPath);
- // }
- //
- // private boolean includesRegex(CDORevision revision, CDORevisionProvider revisionProvider)
- // {
- // if (pattern == null)
- // {
- // String path = substituteUserToken(getPath());
- // pattern = compilePattern(path);
- //
- // if (pattern == null)
- // {
- // return false;
- // }
- // }
- //
- // if (pattern == OMNI_PATTERN)
- // {
- // return true;
- // }
- //
- // String revisionPath = CDORevisionUtil.getResourceNodePath(revision, revisionProvider);
- //
- // Matcher matcher = pattern.matcher(revisionPath);
- // return matcher.matches();
- // }
- //
- // private String substituteUserToken(String string)
- // {
- // int pos = string.indexOf(USER_TOKEN);
- // if (pos != -1)
- // {
- // String user = getUser();
- // if (user == null || user.length() == 0)
- // {
- // throw new IllegalStateException("User required for evaluation of path " + string);
- // }
- //
- // string = string.substring(0, pos) + user + string.substring(pos + USER_TOKEN.length());
- // }
- //
- // return string;
- // }
- //
- // private Pattern compilePattern(String value)
- // {
- // if (value == null)
- // {
- // return null;
- // }
- //
- // if (OMNI_PATTERN.pattern().equals(value))
- // {
- // return OMNI_PATTERN;
- // }
- //
- // try
- // {
- // return Pattern.compile(value);
- // }
- // catch (PatternSyntaxException ex)
- // {
- // return null;
- // }
- // }
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return isResourceTreeImpacted(context);
+ }
public String format()
{
@@ -589,6 +500,32 @@ public class ResourceFilterImpl extends PermissionFilterImpl implements Resource
}
}
+ public static boolean isResourceTreeImpacted(CommitImpactContext context)
+ {
+ InternalCDORevisionDelta[] revisionDeltas = (InternalCDORevisionDelta[])context.getDirtyObjectDeltas();
+
+ for (int i = 0; i < revisionDeltas.length; i++)
+ {
+ InternalCDORevisionDelta revisionDelta = revisionDeltas[i];
+
+ // Any tree move might impact this permission
+ CDOFeatureDelta containerDelta = revisionDelta.getFeatureDelta(CDOContainerFeatureDelta.CONTAINER_FEATURE);
+ if (containerDelta != null)
+ {
+ return true;
+ }
+
+ // Any change of a resource node name might impact this permission
+ CDOFeatureDelta nameDelta = revisionDelta.getFeatureDelta(EresourcePackage.Literals.CDO_RESOURCE_NODE__NAME);
+ if (nameDelta != null)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourcePermissionImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourcePermissionImpl.java
index 989a165a8d..d3e8401112 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourcePermissionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/ResourcePermissionImpl.java
@@ -113,6 +113,12 @@ public class ResourcePermissionImpl extends PermissionImpl implements ResourcePe
return matcher.matches();
}
+ @Override
+ public boolean isImpacted(CommitImpactContext context)
+ {
+ return ResourceFilterImpl.isResourceTreeImpacted(context);
+ }
+
private Pattern compilePattern(String value)
{
if (value == null)
diff --git a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/UserImpl.java b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/UserImpl.java
index 0ffb9d90fc..0525a34ecd 100644
--- a/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/UserImpl.java
+++ b/plugins/org.eclipse.emf.cdo.security/src/org/eclipse/emf/cdo/security/impl/UserImpl.java
@@ -55,7 +55,7 @@ import java.util.Set;
*/
public class UserImpl extends AssigneeImpl implements User
{
- private EList<Group> allGroups = new CachedList<Group>()
+ private EList<Group> allGroups = new DerivedList<Group>()
{
@Override
protected InternalEObject getOwner()
@@ -84,7 +84,7 @@ public class UserImpl extends AssigneeImpl implements User
}
};
- private EList<Role> allRoles = new CachedList<Role>()
+ private EList<Role> allRoles = new DerivedList<Role>()
{
@Override
protected InternalEObject getOwner()
@@ -113,7 +113,7 @@ public class UserImpl extends AssigneeImpl implements User
}
};
- private EList<Permission> allPermissions = new CachedList<Permission>()
+ private EList<Permission> allPermissions = new DerivedList<Permission>()
{
@Override
protected InternalEObject getOwner()
@@ -141,7 +141,7 @@ public class UserImpl extends AssigneeImpl implements User
}
};
- private EList<Role> unassignedRoles = new CachedList<Role>()
+ private EList<Role> unassignedRoles = new DerivedList<Role>()
{
@Override
protected InternalEObject getOwner()

Back to the top