private Permissions createPermissions(
      List<? extends Authority> entityAuthorities, String authorityPrefix) {
    Permissions permissions = new Permissions();
    if (authorityPrefix.equals(SecurityUtils.AUTHORITY_PLUGIN_PREFIX)) {
      List<MolgenisPlugin> plugins = this.getPlugins();
      if (plugins != null) {
        Collections.sort(
            plugins,
            new Comparator<MolgenisPlugin>() {
              @Override
              public int compare(MolgenisPlugin o1, MolgenisPlugin o2) {
                return o1.getName().compareTo(o2.getName());
              }
            });
        Map<String, String> pluginMap = new LinkedHashMap<String, String>();
        for (MolgenisPlugin plugin : plugins) pluginMap.put(plugin.getId(), plugin.getName());
        permissions.setEntityIds(pluginMap);
      }
    } else if (authorityPrefix.equals(SecurityUtils.AUTHORITY_ENTITY_PREFIX)) {
      List<String> entityClassIds = this.getEntityClassIds();
      if (entityClassIds != null) {
        Map<String, String> entityClassMap = new TreeMap<String, String>();
        for (String entityClassId : entityClassIds)
          entityClassMap.put(entityClassId, entityClassId);
        permissions.setEntityIds(entityClassMap);
      }
    } else throw new RuntimeException("Invalid authority prefix [" + authorityPrefix + "]");

    for (Authority authority : entityAuthorities) {

      // add permissions for authorities that match prefix
      if (authority.getRole().startsWith(authorityPrefix)) {
        Permission permission = new Permission();

        String authorityType = getAuthorityType(authority.getRole(), authorityPrefix);
        String authorityPluginId = getAuthorityEntityId(authority.getRole(), authorityPrefix);
        permission.setType(authorityType);
        if (authority instanceof GroupAuthority) {
          permission.setGroup(((GroupAuthority) authority).getMolgenisGroup().getName());
          permissions.addGroupPermission(authorityPluginId, permission);
        } else {
          permissions.addUserPermission(authorityPluginId, permission);
        }
      }

      // add permissions for inherited authorities from authority that match prefix
      SimpleGrantedAuthority grantedAuthority = new SimpleGrantedAuthority(authority.getRole());
      Collection<? extends GrantedAuthority> hierarchyAuthorities =
          grantedAuthoritiesMapper.mapAuthorities(Collections.singletonList(grantedAuthority));
      hierarchyAuthorities.remove(grantedAuthority);

      for (GrantedAuthority hierarchyAuthority : hierarchyAuthorities) {
        if (hierarchyAuthority.getAuthority().startsWith(authorityPrefix)) {
          String authorityPluginId =
              getAuthorityEntityId(hierarchyAuthority.getAuthority(), authorityPrefix);

          Permission hierarchyPermission = new Permission();
          hierarchyPermission.setType(
              getAuthorityType(hierarchyAuthority.getAuthority(), authorityPrefix));
          permissions.addHierarchyPermission(authorityPluginId, hierarchyPermission);
        }
      }
    }

    permissions.sort();

    return permissions;
  }
Example #2
0
 public void setUp() {
   m_permission = new Permission();
   m_permission.setType(Permission.Type.CALL);
   m_permission.setUniqueId(15);
 }