Repository: incubator-ignite Updated Branches: refs/heads/ignite-283-tx 29684e3ae -> 9b51b3235
#gg-9809: add temp class SecurityContextImpl. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/15a5c084 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/15a5c084 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/15a5c084 Branch: refs/heads/ignite-283-tx Commit: 15a5c084fb2689b8511f6b1e069e3ccb9364252e Parents: f9f27f0 Author: ivasilinets <ivasilin...@gridgain.com> Authored: Wed Feb 18 15:23:33 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Wed Feb 18 15:23:33 2015 +0300 ---------------------------------------------------------------------- .../security/os/GridOsSecurityProcessor.java | 256 ------------------ .../security/os/SecurityContextImpl.java | 265 +++++++++++++++++++ 2 files changed, 265 insertions(+), 256 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15a5c084/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java index b83935e..8366b77 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/GridOsSecurityProcessor.java @@ -28,7 +28,6 @@ import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.plugin.security.*; import org.jetbrains.annotations.*; -import java.io.*; import java.net.*; import java.util.*; @@ -221,259 +220,4 @@ public class GridOsSecurityProcessor extends GridProcessorAdapter implements Gri return S.toString(GridSecuritySubjectAdapter.class, this); } } - - /** - * TODO: remove - */ - private class SecurityContextImpl implements SecurityContext, Externalizable { - /** */ - private static final long serialVersionUID = 0L; - - /** - * Visor ignite tasks prefix. - */ - private static final String VISOR_IGNITE_TASK_PREFIX = "org.apache.ignite.internal.visor."; - - /** - * Visor gridgain tasks prefix. - */ - private static final String VISOR_GRIDGAIN_TASK_PREFIX = "org.gridgain.grid.internal.visor."; - - /** - * Cache query task name. - */ - public static final String VISOR_CACHE_QUERY_TASK_NAME = - "org.apache.ignite.internal.visor.query.VisorQueryTask"; - - /** - * Cache load task name. - */ - public static final String VISOR_CACHE_LOAD_TASK_NAME = - "org.apache.ignite.internal.visor.cache.VisorCacheLoadTask"; - - /** - * Cache clear task name. - */ - public static final String VISOR_CACHE_CLEAR_TASK_NAME = - "org.apache.ignite.internal.visor.query.VisorQueryCleanupTask"; - - /** - * Security subject. - */ - private GridSecuritySubject subj; - - /** - * String task permissions. - */ - private Map<String, Collection<GridSecurityPermission>> strictTaskPermissions = new LinkedHashMap<>(); - - /** - * String task permissions. - */ - private Map<String, Collection<GridSecurityPermission>> wildcardTaskPermissions = new LinkedHashMap<>(); - - /** - * String task permissions. - */ - private Map<String, Collection<GridSecurityPermission>> strictCachePermissions = new LinkedHashMap<>(); - - /** - * String task permissions. - */ - private Map<String, Collection<GridSecurityPermission>> wildcardCachePermissions = new LinkedHashMap<>(); - - /** - * System-wide permissions. - */ - private Collection<GridSecurityPermission> sysPermissions; - - /** - * Empty constructor required by {@link Externalizable}. - */ - public SecurityContextImpl() { - // No-op. - } - - /** - * @param subj Subject. - */ - public SecurityContextImpl(GridSecuritySubject subj) { - this.subj = subj; - - initRules(); - } - - /** - * @return Security subject. - */ - public GridSecuritySubject subject() { - return subj; - } - - /** - * Checks whether task operation is allowed. - * - * @param taskClsName Task class name. - * @param perm Permission to check. - * @return {@code True} if task operation is allowed. - */ - public boolean taskOperationAllowed(String taskClsName, GridSecurityPermission perm) { - assert perm == GridSecurityPermission.TASK_EXECUTE || perm == GridSecurityPermission.TASK_CANCEL; - - if (visorTask(taskClsName)) - return visorTaskAllowed(taskClsName); - - Collection<GridSecurityPermission> p = strictTaskPermissions.get(taskClsName); - - if (p != null) - return p.contains(perm); - - for (Map.Entry<String, Collection<GridSecurityPermission>> entry : wildcardTaskPermissions.entrySet()) { - if (taskClsName.startsWith(entry.getKey())) - return entry.getValue().contains(perm); - } - - return subj.permissions().defaultAllowAll(); - } - - /** - * Checks whether cache operation is allowed. - * - * @param cacheName Cache name. - * @param perm Permission to check. - * @return {@code True} if cache operation is allowed. - */ - public boolean cacheOperationAllowed(String cacheName, GridSecurityPermission perm) { - assert perm == GridSecurityPermission.CACHE_PUT || perm == GridSecurityPermission.CACHE_READ || - perm == GridSecurityPermission.CACHE_REMOVE; - - Collection<GridSecurityPermission> p = strictCachePermissions.get(cacheName); - - if (p != null) - return p.contains(perm); - - for (Map.Entry<String, Collection<GridSecurityPermission>> entry : wildcardCachePermissions.entrySet()) { - if (cacheName != null) { - if (cacheName.startsWith(entry.getKey())) - return entry.getValue().contains(perm); - } else { - // Match null cache to '*' - if (entry.getKey().isEmpty()) - return entry.getValue().contains(perm); - } - } - - return subj.permissions().defaultAllowAll(); - } - - /** - * Checks whether system-wide permission is allowed (excluding Visor task operations). - * - * @param perm Permission to check. - * @return {@code True} if system operation is allowed. - */ - public boolean systemOperationAllowed(GridSecurityPermission perm) { - if (sysPermissions == null) - return subj.permissions().defaultAllowAll(); - - boolean ret = sysPermissions.contains(perm); - - if (!ret && (perm == GridSecurityPermission.EVENTS_ENABLE || perm == GridSecurityPermission.EVENTS_DISABLE)) - ret = sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW); - - return ret; - } - - /** - * Checks if task is Visor task. - * - * @param taskCls Task class name. - * @return {@code True} if task is Visor task. - */ - private boolean visorTask(String taskCls) { - return taskCls.startsWith(VISOR_IGNITE_TASK_PREFIX) || taskCls.startsWith(VISOR_GRIDGAIN_TASK_PREFIX); - } - - /** - * Checks if Visor task is allowed for execution. - * - * @param taskName Task name. - * @return {@code True} if execution is allowed. - */ - private boolean visorTaskAllowed(String taskName) { - if (sysPermissions == null) - return subj.permissions().defaultAllowAll(); - - switch (taskName) { - case VISOR_CACHE_QUERY_TASK_NAME: - return sysPermissions.contains(GridSecurityPermission.ADMIN_QUERY); - case VISOR_CACHE_LOAD_TASK_NAME: - case VISOR_CACHE_CLEAR_TASK_NAME: - return sysPermissions.contains(GridSecurityPermission.ADMIN_CACHE); - default: - return sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW); - } - } - - /** - * Init rules. - */ - private void initRules() { - GridSecurityPermissionSet permSet = subj.permissions(); - - for (Map.Entry<String, Collection<GridSecurityPermission>> entry : permSet.taskPermissions().entrySet()) { - String ptrn = entry.getKey(); - - Collection<GridSecurityPermission> vals = Collections.unmodifiableCollection(entry.getValue()); - - if (ptrn.endsWith("*")) { - String noWildcard = ptrn.substring(0, ptrn.length() - 1); - - wildcardTaskPermissions.put(noWildcard, vals); - } else - strictTaskPermissions.put(ptrn, vals); - } - - for (Map.Entry<String, Collection<GridSecurityPermission>> entry : permSet.cachePermissions().entrySet()) { - String ptrn = entry.getKey(); - - Collection<GridSecurityPermission> vals = Collections.unmodifiableCollection(entry.getValue()); - - if (ptrn != null && ptrn.endsWith("*")) { - String noWildcard = ptrn.substring(0, ptrn.length() - 1); - - wildcardCachePermissions.put(noWildcard, vals); - } else - strictCachePermissions.put(ptrn, vals); - } - - sysPermissions = permSet.systemPermissions(); - } - - /** - * {@inheritDoc} - */ - @Override - public void writeExternal(ObjectOutput out) throws IOException { - out.writeObject(subj); - } - - /** - * {@inheritDoc} - */ - @Override - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - subj = (GridSecuritySubject) in.readObject(); - - initRules(); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return S.toString(SecurityContextImpl.class, this); - } - } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15a5c084/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java new file mode 100644 index 0000000..136ab3f --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/os/SecurityContextImpl.java @@ -0,0 +1,265 @@ +package org.apache.ignite.internal.processors.security.os; + +import org.apache.ignite.internal.processors.security.*; +import org.apache.ignite.internal.util.typedef.internal.*; +import org.apache.ignite.plugin.security.*; + +import java.io.*; +import java.util.*; + +/** + * TODO: remove + */ +public class SecurityContextImpl implements SecurityContext, Externalizable + + { + /** */ + private static final long serialVersionUID = 0L; + + /** + * Visor ignite tasks prefix. + */ + private static final String VISOR_IGNITE_TASK_PREFIX = "org.apache.ignite.internal.visor."; + + /** + * Visor gridgain tasks prefix. + */ + private static final String VISOR_GRIDGAIN_TASK_PREFIX = "org.gridgain.grid.internal.visor."; + + /** + * Cache query task name. + */ + public static final String VISOR_CACHE_QUERY_TASK_NAME = + "org.apache.ignite.internal.visor.query.VisorQueryTask"; + + /** + * Cache load task name. + */ + public static final String VISOR_CACHE_LOAD_TASK_NAME = + "org.apache.ignite.internal.visor.cache.VisorCacheLoadTask"; + + /** + * Cache clear task name. + */ + public static final String VISOR_CACHE_CLEAR_TASK_NAME = + "org.apache.ignite.internal.visor.query.VisorQueryCleanupTask"; + + /** + * Security subject. + */ + private GridSecuritySubject subj; + + /** + * String task permissions. + */ + private Map<String, Collection<GridSecurityPermission>> strictTaskPermissions = new LinkedHashMap<>(); + + /** + * String task permissions. + */ + private Map<String, Collection<GridSecurityPermission>> wildcardTaskPermissions = new LinkedHashMap<>(); + + /** + * String task permissions. + */ + private Map<String, Collection<GridSecurityPermission>> strictCachePermissions = new LinkedHashMap<>(); + + /** + * String task permissions. + */ + private Map<String, Collection<GridSecurityPermission>> wildcardCachePermissions = new LinkedHashMap<>(); + + /** + * System-wide permissions. + */ + private Collection<GridSecurityPermission> sysPermissions; + + /** + * Empty constructor required by {@link Externalizable}. + */ + public SecurityContextImpl() { + // No-op. + } + + /** + * @param subj Subject. + */ + public SecurityContextImpl(GridSecuritySubject subj) { + this.subj = subj; + + initRules(); + } + + /** + * @return Security subject. + */ + public GridSecuritySubject subject() { + return subj; + } + + /** + * Checks whether task operation is allowed. + * + * @param taskClsName Task class name. + * @param perm Permission to check. + * @return {@code True} if task operation is allowed. + */ + public boolean taskOperationAllowed(String taskClsName, GridSecurityPermission perm) { + assert perm == GridSecurityPermission.TASK_EXECUTE || perm == GridSecurityPermission.TASK_CANCEL; + + if (visorTask(taskClsName)) + return visorTaskAllowed(taskClsName); + + Collection<GridSecurityPermission> p = strictTaskPermissions.get(taskClsName); + + if (p != null) + return p.contains(perm); + + for (Map.Entry<String, Collection<GridSecurityPermission>> entry : wildcardTaskPermissions.entrySet()) { + if (taskClsName.startsWith(entry.getKey())) + return entry.getValue().contains(perm); + } + + return subj.permissions().defaultAllowAll(); + } + + /** + * Checks whether cache operation is allowed. + * + * @param cacheName Cache name. + * @param perm Permission to check. + * @return {@code True} if cache operation is allowed. + */ + public boolean cacheOperationAllowed(String cacheName, GridSecurityPermission perm) { + assert perm == GridSecurityPermission.CACHE_PUT || perm == GridSecurityPermission.CACHE_READ || + perm == GridSecurityPermission.CACHE_REMOVE; + + Collection<GridSecurityPermission> p = strictCachePermissions.get(cacheName); + + if (p != null) + return p.contains(perm); + + for (Map.Entry<String, Collection<GridSecurityPermission>> entry : wildcardCachePermissions.entrySet()) { + if (cacheName != null) { + if (cacheName.startsWith(entry.getKey())) + return entry.getValue().contains(perm); + } else { + // Match null cache to '*' + if (entry.getKey().isEmpty()) + return entry.getValue().contains(perm); + } + } + + return subj.permissions().defaultAllowAll(); + } + + /** + * Checks whether system-wide permission is allowed (excluding Visor task operations). + * + * @param perm Permission to check. + * @return {@code True} if system operation is allowed. + */ + public boolean systemOperationAllowed(GridSecurityPermission perm) { + if (sysPermissions == null) + return subj.permissions().defaultAllowAll(); + + boolean ret = sysPermissions.contains(perm); + + if (!ret && (perm == GridSecurityPermission.EVENTS_ENABLE || perm == GridSecurityPermission.EVENTS_DISABLE)) + ret = sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW); + + return ret; + } + + /** + * Checks if task is Visor task. + * + * @param taskCls Task class name. + * @return {@code True} if task is Visor task. + */ + private boolean visorTask(String taskCls) { + return taskCls.startsWith(VISOR_IGNITE_TASK_PREFIX) || taskCls.startsWith(VISOR_GRIDGAIN_TASK_PREFIX); + } + + /** + * Checks if Visor task is allowed for execution. + * + * @param taskName Task name. + * @return {@code True} if execution is allowed. + */ + private boolean visorTaskAllowed(String taskName) { + if (sysPermissions == null) + return subj.permissions().defaultAllowAll(); + + switch (taskName) { + case VISOR_CACHE_QUERY_TASK_NAME: + return sysPermissions.contains(GridSecurityPermission.ADMIN_QUERY); + case VISOR_CACHE_LOAD_TASK_NAME: + case VISOR_CACHE_CLEAR_TASK_NAME: + return sysPermissions.contains(GridSecurityPermission.ADMIN_CACHE); + default: + return sysPermissions.contains(GridSecurityPermission.ADMIN_VIEW); + } + } + + /** + * Init rules. + */ + private void initRules() { + GridSecurityPermissionSet permSet = subj.permissions(); + + for (Map.Entry<String, Collection<GridSecurityPermission>> entry : permSet.taskPermissions().entrySet()) { + String ptrn = entry.getKey(); + + Collection<GridSecurityPermission> vals = Collections.unmodifiableCollection(entry.getValue()); + + if (ptrn.endsWith("*")) { + String noWildcard = ptrn.substring(0, ptrn.length() - 1); + + wildcardTaskPermissions.put(noWildcard, vals); + } else + strictTaskPermissions.put(ptrn, vals); + } + + for (Map.Entry<String, Collection<GridSecurityPermission>> entry : permSet.cachePermissions().entrySet()) { + String ptrn = entry.getKey(); + + Collection<GridSecurityPermission> vals = Collections.unmodifiableCollection(entry.getValue()); + + if (ptrn != null && ptrn.endsWith("*")) { + String noWildcard = ptrn.substring(0, ptrn.length() - 1); + + wildcardCachePermissions.put(noWildcard, vals); + } else + strictCachePermissions.put(ptrn, vals); + } + + sysPermissions = permSet.systemPermissions(); + } + + /** + * {@inheritDoc} + */ + @Override + public void writeExternal(ObjectOutput out) throws IOException { + out.writeObject(subj); + } + + /** + * {@inheritDoc} + */ + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + subj = (GridSecuritySubject) in.readObject(); + + initRules(); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return S.toString(SecurityContextImpl.class, this); + } +}