extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/dao/ReggieRole.java

Code
Comments
Other
Rev Date Author Line
2157 05 Dec 13 nicklas 1 package net.sf.basedb.reggie.dao;
2157 05 Dec 13 nicklas 2
2157 05 Dec 13 nicklas 3 import java.lang.reflect.Field;
2157 05 Dec 13 nicklas 4 import java.util.List;
2157 05 Dec 13 nicklas 5
2157 05 Dec 13 nicklas 6 import org.json.simple.JSONObject;
2157 05 Dec 13 nicklas 7
2157 05 Dec 13 nicklas 8 import net.sf.basedb.core.DbControl;
2157 05 Dec 13 nicklas 9 import net.sf.basedb.core.Group;
2157 05 Dec 13 nicklas 10 import net.sf.basedb.core.Include;
2157 05 Dec 13 nicklas 11 import net.sf.basedb.core.InvalidDataException;
2157 05 Dec 13 nicklas 12 import net.sf.basedb.core.Item;
2157 05 Dec 13 nicklas 13 import net.sf.basedb.core.ItemNotFoundException;
2157 05 Dec 13 nicklas 14 import net.sf.basedb.core.ItemQuery;
2157 05 Dec 13 nicklas 15 import net.sf.basedb.core.Nameable;
2161 09 Dec 13 nicklas 16 import net.sf.basedb.core.PermissionDeniedException;
2157 05 Dec 13 nicklas 17 import net.sf.basedb.core.Role;
5026 15 Oct 18 nicklas 18 import net.sf.basedb.core.SessionControl;
2161 09 Dec 13 nicklas 19 import net.sf.basedb.core.SystemItems;
2157 05 Dec 13 nicklas 20 import net.sf.basedb.core.Type;
2161 09 Dec 13 nicklas 21 import net.sf.basedb.core.User;
2157 05 Dec 13 nicklas 22 import net.sf.basedb.core.query.Expressions;
2157 05 Dec 13 nicklas 23 import net.sf.basedb.core.query.Hql;
2157 05 Dec 13 nicklas 24 import net.sf.basedb.core.query.Restrictions;
2157 05 Dec 13 nicklas 25
2157 05 Dec 13 nicklas 26 /**
2157 05 Dec 13 nicklas 27   Used to define a roles for users using Reggie. A "role" can be either
2157 05 Dec 13 nicklas 28   a BASE Group item or a Role item.
2157 05 Dec 13 nicklas 29   
2157 05 Dec 13 nicklas 30   @author nicklas
2157 05 Dec 13 nicklas 31   @since 2.14
2157 05 Dec 13 nicklas 32 */
2157 05 Dec 13 nicklas 33 public class ReggieRole<T extends Nameable> 
2157 05 Dec 13 nicklas 34 {
2157 05 Dec 13 nicklas 35
2157 05 Dec 13 nicklas 36   /**
2157 05 Dec 13 nicklas 37     The definition of the "PatientCurator" role. Maps to a BASE group item.
2157 05 Dec 13 nicklas 38   */
3987 10 Jun 16 nicklas 39   public static final ReggieRole<Group> PATIENT_CURATOR = new ReggieRole<Group>("PatientCurator", Item.GROUP, false);
2157 05 Dec 13 nicklas 40
2157 05 Dec 13 nicklas 41   /**
2157 05 Dec 13 nicklas 42     The definition of the "Administrator" role. Maps to a BASE role item. Should already exist in BASE.
2157 05 Dec 13 nicklas 43   */
3987 10 Jun 16 nicklas 44   public static final ReggieRole<Role> ADMINISTRATOR = new ReggieRole<Role>("Administrator", Item.ROLE, false);
2157 05 Dec 13 nicklas 45
2157 05 Dec 13 nicklas 46   /**
2157 05 Dec 13 nicklas 47     The definition of the "SamplePrep" role. Maps to a BASE role item.
2157 05 Dec 13 nicklas 48   */
3987 10 Jun 16 nicklas 49   public static final ReggieRole<Role> SAMPLE_PREP = new ReggieRole<Role>("SamplePrep", Item.ROLE, false);
2157 05 Dec 13 nicklas 50
2157 05 Dec 13 nicklas 51   /**
2157 05 Dec 13 nicklas 52     The definition of the "Histology" role. Maps to a BASE role item.
2157 05 Dec 13 nicklas 53   */
3987 10 Jun 16 nicklas 54   public static final ReggieRole<Role> HISTOLOGY = new ReggieRole<Role>("Histology", Item.ROLE, false);
2157 05 Dec 13 nicklas 55
2157 05 Dec 13 nicklas 56   /**
2157 05 Dec 13 nicklas 57     The definition of the "LibraryPrep" role. Maps to a BASE role item.
2157 05 Dec 13 nicklas 58   */
3987 10 Jun 16 nicklas 59   public static final ReggieRole<Role> LIBRARY_PREP = new ReggieRole<Role>("LibraryPrep", Item.ROLE, false);
2157 05 Dec 13 nicklas 60
2157 05 Dec 13 nicklas 61   /**
5405 08 May 19 nicklas 62     The definition of the "MIPsLibraryPrep" role. Maps to a BASE role item.
5405 08 May 19 nicklas 63     @since 4.23
5405 08 May 19 nicklas 64   */
5405 08 May 19 nicklas 65   public static final ReggieRole<Role> MIPS_LIBRARY_PREP = new ReggieRole<Role>("MIPsLibraryPrep", Item.ROLE, false);
5405 08 May 19 nicklas 66
5405 08 May 19 nicklas 67   
5405 08 May 19 nicklas 68   /**
2157 05 Dec 13 nicklas 69     The definition of the "LibraryPlateDesigner" role. Maps to a BASE role item.
2157 05 Dec 13 nicklas 70   */
3987 10 Jun 16 nicklas 71   public static final ReggieRole<Role> LIBRARY_PLATE_DESIGNER = new ReggieRole<Role>("LibraryPlateDesigner", Item.ROLE, false);
2157 05 Dec 13 nicklas 72
2157 05 Dec 13 nicklas 73   /**
5405 08 May 19 nicklas 74     The definition of the "MIPsPlateDesigner" role. Maps to a BASE role item.
5405 08 May 19 nicklas 75     @since 4.23
5405 08 May 19 nicklas 76   */
5405 08 May 19 nicklas 77   public static final ReggieRole<Role> MIPS_PLATE_DESIGNER = new ReggieRole<Role>("MIPsPlateDesigner", Item.ROLE, false);
5405 08 May 19 nicklas 78
5405 08 May 19 nicklas 79   /**
2562 08 Aug 14 nicklas 80     The definition of the "SecondaryAnalysis" group. Maps to a BASE group item.
2157 05 Dec 13 nicklas 81   */
3987 10 Jun 16 nicklas 82   public static final ReggieRole<Group> SECONDARY_ANALYSIS = new ReggieRole<Group>("SecondaryAnalysis", Item.GROUP, false);
2157 05 Dec 13 nicklas 83
2157 05 Dec 13 nicklas 84   /**
5582 21 Aug 19 nicklas 85     The definition of the "MIPsSecondaryAnalysis" group. Maps to a BASE group item.
5485 12 Jun 19 nicklas 86   */
5582 21 Aug 19 nicklas 87   public static final ReggieRole<Group> MIPS_SECONDARY_ANALYSIS = new ReggieRole<Group>("MIPsSecondaryAnalysis", Item.GROUP, false);
5485 12 Jun 19 nicklas 88
5485 12 Jun 19 nicklas 89   /**
3163 04 Mar 15 nicklas 90     The definition of the "PrepCurator" group. Maps to a BASE role item.
3163 04 Mar 15 nicklas 91     @since 3.2
3163 04 Mar 15 nicklas 92   */
3987 10 Jun 16 nicklas 93   public static final ReggieRole<Group> PREP_CURATOR = new ReggieRole<Group>("PrepCurator", Item.ROLE, false);
3163 04 Mar 15 nicklas 94
3163 04 Mar 15 nicklas 95   /**
3986 10 Jun 16 nicklas 96     The "SCAN-B Delivery" group. User accounts that need to use the delivery client
3986 10 Jun 16 nicklas 97     should be member of this group.
3986 10 Jun 16 nicklas 98     @since 4.6
3986 10 Jun 16 nicklas 99   */
3987 10 Jun 16 nicklas 100   public static final ReggieRole<Group> SCANB_DELIVERY = new ReggieRole<Group>("SCAN-B Delivery", Item.GROUP, true);
3986 10 Jun 16 nicklas 101
3986 10 Jun 16 nicklas 102   /**
3986 10 Jun 16 nicklas 103     The "SCAN-B Lab" group. For user accounts working in the SCAN-B lab.
3986 10 Jun 16 nicklas 104     @since 4.6
3986 10 Jun 16 nicklas 105   */
3987 10 Jun 16 nicklas 106   public static final ReggieRole<Group> SCANB_LAB = new ReggieRole<Group>("SCAN-B Lab", Item.GROUP, false);
3986 10 Jun 16 nicklas 107
3986 10 Jun 16 nicklas 108   
3986 10 Jun 16 nicklas 109   /**
3571 30 Oct 15 nicklas 110     Get the Reggie role by name of the static constant defined in this class.
2157 05 Dec 13 nicklas 111     
3571 30 Oct 15 nicklas 112     @param cName The name of the static constant
3571 30 Oct 15 nicklas 113     @return A Reggie role object or null if not found
2157 05 Dec 13 nicklas 114     @since 2.4
2157 05 Dec 13 nicklas 115   */
3572 02 Nov 15 nicklas 116   public static ReggieRole<?> getByCName(String cName)
2157 05 Dec 13 nicklas 117   {
2157 05 Dec 13 nicklas 118     if (cName == null) return null;
3572 02 Nov 15 nicklas 119     ReggieRole<?> role = null;
2157 05 Dec 13 nicklas 120     try
2157 05 Dec 13 nicklas 121     {
2157 05 Dec 13 nicklas 122       Field f = ReggieRole.class.getDeclaredField(cName);
3572 02 Nov 15 nicklas 123       role = (ReggieRole<?>)f.get(null);
2157 05 Dec 13 nicklas 124     }
2157 05 Dec 13 nicklas 125     catch (NoSuchFieldException ex)
2157 05 Dec 13 nicklas 126     {}
2157 05 Dec 13 nicklas 127     catch (IllegalAccessException ex)
2157 05 Dec 13 nicklas 128     {}
2157 05 Dec 13 nicklas 129     catch (ClassCastException ex)
2157 05 Dec 13 nicklas 130     {}
2157 05 Dec 13 nicklas 131     return role;
2157 05 Dec 13 nicklas 132   }
2157 05 Dec 13 nicklas 133   
2161 09 Dec 13 nicklas 134   /**
2161 09 Dec 13 nicklas 135     Check if the current user is a member of at least one of the given roles.
2161 09 Dec 13 nicklas 136     If {@link ReggieRole#ADMINISTRATOR} is in the list, the method also check
2161 09 Dec 13 nicklas 137     if the user is the ROOT user or not. If the user is not member of any
2161 09 Dec 13 nicklas 138     of the roles a PermissionDeniedException is thrown.
2161 09 Dec 13 nicklas 139     
2161 09 Dec 13 nicklas 140     @param dc An active DbControl
2161 09 Dec 13 nicklas 141     @param message A message that is used if the user is not a member:
2161 09 Dec 13 nicklas 142       Permission denied: Not allowed to use <message>
2161 09 Dec 13 nicklas 143     @param roles A list with the roles to check
2161 09 Dec 13 nicklas 144     
2161 09 Dec 13 nicklas 145   */
3572 02 Nov 15 nicklas 146   public static void checkPermission(DbControl dc, String message, ReggieRole<?>... roles)
2161 09 Dec 13 nicklas 147   {
5344 02 Apr 19 nicklas 148     StringBuilder msg = new StringBuilder(message);
5344 02 Apr 19 nicklas 149     msg.append(roles.length == 1 ? " requires " : " requires one of ");
5344 02 Apr 19 nicklas 150     int i = roles.length;
3572 02 Nov 15 nicklas 151     for (ReggieRole<?> role : roles)
2161 09 Dec 13 nicklas 152     {
2161 09 Dec 13 nicklas 153       if (role.isMember(dc)) return;
2161 09 Dec 13 nicklas 154       if (role == ReggieRole.ADMINISTRATOR)
2161 09 Dec 13 nicklas 155       {
2161 09 Dec 13 nicklas 156         boolean isRoot = dc.getSessionControl().getLoggedInUserId() == SystemItems.getId(User.ROOT);
2161 09 Dec 13 nicklas 157         if (isRoot) return;
2161 09 Dec 13 nicklas 158       }
5344 02 Apr 19 nicklas 159       msg.append("'").append(role.getName()).append("'");
5344 02 Apr 19 nicklas 160       i--;
5344 02 Apr 19 nicklas 161       if (i > 0) msg.append(i == 1 ? " or " : ", ");
2161 09 Dec 13 nicklas 162     }
5344 02 Apr 19 nicklas 163     msg.append(" permission.");
5344 02 Apr 19 nicklas 164     throw new PermissionDeniedException(msg.toString()); 
2161 09 Dec 13 nicklas 165   }
2161 09 Dec 13 nicklas 166     
2157 05 Dec 13 nicklas 167   private final String name;
2157 05 Dec 13 nicklas 168   private final Item actualType;
3987 10 Jun 16 nicklas 169   private final boolean hiddenMembers;
2157 05 Dec 13 nicklas 170   private int id;
2157 05 Dec 13 nicklas 171   private JSONObject json;
2157 05 Dec 13 nicklas 172   
2157 05 Dec 13 nicklas 173   /**
2157 05 Dec 13 nicklas 174     Create a new definition
2157 05 Dec 13 nicklas 175     @param name The name of the subtype
2157 05 Dec 13 nicklas 176     @param actualType The actual item type of the role (Item.ROLE or Item.GROUP)
3987 10 Jun 16 nicklas 177     @param hiddenMembers Flag to indicate if members should be hidden from each other
3987 10 Jun 16 nicklas 178       (only used for groups)
2157 05 Dec 13 nicklas 179   */
4002 17 Jun 16 nicklas 180   protected ReggieRole(String name, Item actualType, boolean hiddenMembers)
2157 05 Dec 13 nicklas 181   {
2157 05 Dec 13 nicklas 182     this.name = name;
2157 05 Dec 13 nicklas 183     this.actualType = actualType;
3987 10 Jun 16 nicklas 184     this.hiddenMembers = hiddenMembers;
2157 05 Dec 13 nicklas 185   }
2157 05 Dec 13 nicklas 186   
2157 05 Dec 13 nicklas 187   /**
2157 05 Dec 13 nicklas 188     Get the name of the role.
2157 05 Dec 13 nicklas 189   */
2157 05 Dec 13 nicklas 190   public String getName()
2157 05 Dec 13 nicklas 191   {
2157 05 Dec 13 nicklas 192     return name;
2157 05 Dec 13 nicklas 193   }
2157 05 Dec 13 nicklas 194   
2157 05 Dec 13 nicklas 195   /**
2157 05 Dec 13 nicklas 196     Get the actual item type of the role.
2157 05 Dec 13 nicklas 197   */
2157 05 Dec 13 nicklas 198   public Item getActualType()
2157 05 Dec 13 nicklas 199   {
2157 05 Dec 13 nicklas 200     return actualType;
2157 05 Dec 13 nicklas 201   }
2157 05 Dec 13 nicklas 202   
2157 05 Dec 13 nicklas 203   /**
3987 10 Jun 16 nicklas 204     If this is a group, are the members hidden?
3987 10 Jun 16 nicklas 205     @since 4.6
3987 10 Jun 16 nicklas 206   */
3987 10 Jun 16 nicklas 207   public boolean hasHiddenMembers()
3987 10 Jun 16 nicklas 208   {
3987 10 Jun 16 nicklas 209     return hiddenMembers;
3987 10 Jun 16 nicklas 210   }
3987 10 Jun 16 nicklas 211   
3987 10 Jun 16 nicklas 212   /**
2157 05 Dec 13 nicklas 213     Get the role information as a JSON object ready to be sent as an AJAX response.
2157 05 Dec 13 nicklas 214   */
2157 05 Dec 13 nicklas 215   public JSONObject asJSONObject(DbControl dc)
2157 05 Dec 13 nicklas 216   {
2157 05 Dec 13 nicklas 217     if (json == null)
2157 05 Dec 13 nicklas 218     {
2157 05 Dec 13 nicklas 219       if (id==0) load(dc); // Ensure that the subtype has been loaded
2157 05 Dec 13 nicklas 220       json = new JSONObject();
2157 05 Dec 13 nicklas 221       json.put("id", id);
2157 05 Dec 13 nicklas 222       json.put("name", getName());
2157 05 Dec 13 nicklas 223       json.put("actualType", getActualType().name());
3987 10 Jun 16 nicklas 224       json.put("hiddenMembers", hasHiddenMembers());
2157 05 Dec 13 nicklas 225     }
2157 05 Dec 13 nicklas 226     return json;
2157 05 Dec 13 nicklas 227   }
2157 05 Dec 13 nicklas 228   
2157 05 Dec 13 nicklas 229   /**
2157 05 Dec 13 nicklas 230     Load the role as a BASE item. Same as {@link #get(DbControl)}
2157 05 Dec 13 nicklas 231     but throw an exception instead of returning null if no BASE
2157 05 Dec 13 nicklas 232     item exists.
2157 05 Dec 13 nicklas 233     @param dc The DbControl to use for database access
2157 05 Dec 13 nicklas 234     @return A Role or Group item
2157 05 Dec 13 nicklas 235   */
2157 05 Dec 13 nicklas 236   @SuppressWarnings("unchecked")
2157 05 Dec 13 nicklas 237   public T load(DbControl dc)
2157 05 Dec 13 nicklas 238   {
2157 05 Dec 13 nicklas 239     T role = null;
2157 05 Dec 13 nicklas 240     if (id == 0)
2157 05 Dec 13 nicklas 241     {
2157 05 Dec 13 nicklas 242       List<T> result = list(dc);
2157 05 Dec 13 nicklas 243       if (result.size() == 0)
2157 05 Dec 13 nicklas 244       {
2157 05 Dec 13 nicklas 245         throw new ItemNotFoundException(actualType+"["+name+"]");
2157 05 Dec 13 nicklas 246       }
2157 05 Dec 13 nicklas 247       else if (result.size() > 1)
2157 05 Dec 13 nicklas 248       {
2157 05 Dec 13 nicklas 249         throw new InvalidDataException("Found > 1 " + actualType + "["+name+"]");
2157 05 Dec 13 nicklas 250       }
2157 05 Dec 13 nicklas 251       role = result.get(0);
2157 05 Dec 13 nicklas 252       id = role.getId();
2157 05 Dec 13 nicklas 253     }
2157 05 Dec 13 nicklas 254     else
2157 05 Dec 13 nicklas 255     {
2157 05 Dec 13 nicklas 256       role = (T)actualType.getById(dc, id);
2157 05 Dec 13 nicklas 257     }
2157 05 Dec 13 nicklas 258     return role;
2157 05 Dec 13 nicklas 259   }
2157 05 Dec 13 nicklas 260   
2157 05 Dec 13 nicklas 261   /**
2157 05 Dec 13 nicklas 262     Load the role as a BASE item. Same as {@link #load(DbControl)} but return null
2157 05 Dec 13 nicklas 263     if no BASE item is found instead of throwing an exception.
2157 05 Dec 13 nicklas 264     @param dc The DbControl to use for database access
2157 05 Dec 13 nicklas 265     @return A Role or Group item
2157 05 Dec 13 nicklas 266   */
2157 05 Dec 13 nicklas 267   @SuppressWarnings("unchecked")
2157 05 Dec 13 nicklas 268   public T get(DbControl dc)
2157 05 Dec 13 nicklas 269   {
2157 05 Dec 13 nicklas 270     T role = null;
2157 05 Dec 13 nicklas 271     if (id == 0)
2157 05 Dec 13 nicklas 272     {
2157 05 Dec 13 nicklas 273       List<T> result = list(dc);
2157 05 Dec 13 nicklas 274       if (result.size() == 1)
2157 05 Dec 13 nicklas 275       {
2157 05 Dec 13 nicklas 276         role = result.get(0);
2157 05 Dec 13 nicklas 277         id = role.getId();
2157 05 Dec 13 nicklas 278       }
2157 05 Dec 13 nicklas 279     }
2157 05 Dec 13 nicklas 280     else
2157 05 Dec 13 nicklas 281     {
2157 05 Dec 13 nicklas 282       role = (T)actualType.getById(dc, id);
2157 05 Dec 13 nicklas 283     }
2157 05 Dec 13 nicklas 284     return role;
2157 05 Dec 13 nicklas 285     
2157 05 Dec 13 nicklas 286   }
2157 05 Dec 13 nicklas 287   
2157 05 Dec 13 nicklas 288   /**
2157 05 Dec 13 nicklas 289     List all groups/roles registered in BASE with a name 
2157 05 Dec 13 nicklas 290     matching this definition. Normally, only a single item 
2157 05 Dec 13 nicklas 291     should be returned.
2157 05 Dec 13 nicklas 292   */
2157 05 Dec 13 nicklas 293   @SuppressWarnings("unchecked")
2157 05 Dec 13 nicklas 294   public List<T> list(DbControl dc)
2157 05 Dec 13 nicklas 295   {
3572 02 Nov 15 nicklas 296     ItemQuery<?> query = null;
2157 05 Dec 13 nicklas 297     if (actualType == Item.GROUP)
2157 05 Dec 13 nicklas 298     {
2157 05 Dec 13 nicklas 299       query = Group.getQuery();
2157 05 Dec 13 nicklas 300     }
2157 05 Dec 13 nicklas 301     else if (actualType == Item.ROLE)
2157 05 Dec 13 nicklas 302     {
2157 05 Dec 13 nicklas 303       query = Role.getQuery();
2157 05 Dec 13 nicklas 304     }
2157 05 Dec 13 nicklas 305     query.restrict(
2157 05 Dec 13 nicklas 306       Restrictions.eq(
2157 05 Dec 13 nicklas 307         Hql.property("name"), 
2157 05 Dec 13 nicklas 308         Expressions.parameter("name", getName(), Type.STRING)
2157 05 Dec 13 nicklas 309       ));
2157 05 Dec 13 nicklas 310     query.include(Include.ALL);
2157 05 Dec 13 nicklas 311     return (List<T>)query.list(dc);
2157 05 Dec 13 nicklas 312   }
2157 05 Dec 13 nicklas 313   
2157 05 Dec 13 nicklas 314
2157 05 Dec 13 nicklas 315   @SuppressWarnings("unchecked")
2157 05 Dec 13 nicklas 316   public T create(DbControl dc)
2157 05 Dec 13 nicklas 317   {
2157 05 Dec 13 nicklas 318     T item = null;
2157 05 Dec 13 nicklas 319     if (actualType == Item.GROUP)
2157 05 Dec 13 nicklas 320     {
2157 05 Dec 13 nicklas 321       item = (T)Group.getNew(dc);
3987 10 Jun 16 nicklas 322       
2157 05 Dec 13 nicklas 323     }
2157 05 Dec 13 nicklas 324     else if (actualType == Item.ROLE)
2157 05 Dec 13 nicklas 325     {
2157 05 Dec 13 nicklas 326       item = (T)Role.getNew(dc);
2157 05 Dec 13 nicklas 327     }
2157 05 Dec 13 nicklas 328     return item;
2157 05 Dec 13 nicklas 329   }
2157 05 Dec 13 nicklas 330   
2157 05 Dec 13 nicklas 331   /**
2157 05 Dec 13 nicklas 332     Check if the currently logged in user is a member of this role/group.
2157 05 Dec 13 nicklas 333    */
2157 05 Dec 13 nicklas 334   public boolean isMember(DbControl dc)
2157 05 Dec 13 nicklas 335   {
2157 05 Dec 13 nicklas 336     T item = null;
2157 05 Dec 13 nicklas 337     try
2157 05 Dec 13 nicklas 338     {
2157 05 Dec 13 nicklas 339       item = get(dc);
2157 05 Dec 13 nicklas 340     }
2157 05 Dec 13 nicklas 341     catch (RuntimeException ex)
2157 05 Dec 13 nicklas 342     {}
2157 05 Dec 13 nicklas 343     
2157 05 Dec 13 nicklas 344     boolean isMember = false;
2157 05 Dec 13 nicklas 345     if (item != null)
2157 05 Dec 13 nicklas 346     {
5026 15 Oct 18 nicklas 347       SessionControl sc = dc.getSessionControl();
2157 05 Dec 13 nicklas 348       if (actualType == Item.GROUP)
2157 05 Dec 13 nicklas 349       {
5026 15 Oct 18 nicklas 350         isMember = sc.isMemberOf((Group)item);
2157 05 Dec 13 nicklas 351       }
2157 05 Dec 13 nicklas 352       else if (actualType == Item.ROLE)
2157 05 Dec 13 nicklas 353       {
5026 15 Oct 18 nicklas 354         isMember = sc.isMemberOf((Role)item) && !sc.isRoleInactive(item.getId());
2157 05 Dec 13 nicklas 355       }
2157 05 Dec 13 nicklas 356     }
2157 05 Dec 13 nicklas 357     
2157 05 Dec 13 nicklas 358     return isMember;
2157 05 Dec 13 nicklas 359   }
2157 05 Dec 13 nicklas 360 }