/* * $Id$ * * Copyright 2008 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.security; import ome.model.IEnum; import ome.model.IGlobal; import ome.model.IObject; import ome.model.internal.Details; import ome.model.jobs.Job; import ome.model.meta.DBPatch; import ome.model.meta.Event; import ome.model.meta.EventLog; import ome.model.meta.Experimenter; import ome.model.meta.ExperimenterGroup; import ome.model.meta.GroupExperimenterMap; import ome.model.meta.Node; import ome.model.meta.ShareMember; import ome.system.Roles; /** * Defines what {@link IObject} classes are considered "system" types. System * types have special meaning with regard to ACL. They cannot be created except * by an administrator, primarily. * * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta4 */ public class SystemTypes { private final Roles roles; public SystemTypes() { this(new Roles()); } public SystemTypes(Roles roles) { this.roles = roles; } /** * classes which cannot be created by regular users. * * @see <a * href="http://trac.openmicroscopy.org.uk/ome/ticket/156">ticket156</a> */ public boolean isSystemType(Class<?> klass) { if (klass == null) { return false; } if (ome.model.meta.Session.class.isAssignableFrom(klass)) { return true; } else if (ShareMember.class.isAssignableFrom(klass)) { return true; } else if (Node.class.isAssignableFrom(klass)) { return true; } else if (Experimenter.class.isAssignableFrom(klass)) { return true; } else if (ExperimenterGroup.class.isAssignableFrom(klass)) { return true; } else if (GroupExperimenterMap.class.isAssignableFrom(klass)) { return true; } else if (Event.class.isAssignableFrom(klass)) { return true; } else if (EventLog.class.isAssignableFrom(klass)) { return true; } else if (IEnum.class.isAssignableFrom(klass)) { return true; } else if (Job.class.isAssignableFrom(klass)) { return true; } else if (DBPatch.class.isAssignableFrom(klass)) { return true; } else if (IGlobal.class.isAssignableFrom(klass)) { return true; } return false; } // ticket:1784 - Make "system" group contents system types. public boolean isInSystemGroup(Long groupId) { Long systemGroupId = Long.valueOf(roles.getSystemGroupId()); if (systemGroupId.equals(groupId)) { return true; } return false; } public boolean isInSystemGroup(Details d) { if (d == null || d.getGroup() == null) { return false; } Long groupId = d.getGroup().getId(); return isInSystemGroup(groupId); } // ticket:1791 public boolean isInUserGroup(Long groupId) { Long userGroupId = Long.valueOf(roles.getUserGroupId()); if (userGroupId.equals(groupId)) { return true; } return false; } public boolean isInUserGroup(Details d) { if (d == null || d.getGroup() == null) { return false; } Long groupId = d.getGroup().getId(); return isInUserGroup(groupId); } }