/** Final initialization, once all dependencies are set. */ public void init() { try { m_relativeAccessPoint = REFERENCE_ROOT; // construct storage and read m_storage = newStorage(); m_storage.open(); // register as an entity producer entityManager().registerEntityProducer(this, REFERENCE_ROOT); // register functions functionManager().registerFunction(SECURE_ADD_AUTHZ_GROUP); functionManager().registerFunction(SECURE_REMOVE_AUTHZ_GROUP); functionManager().registerFunction(SECURE_UPDATE_AUTHZ_GROUP); functionManager().registerFunction(SECURE_UPDATE_OWN_AUTHZ_GROUP); // if no provider was set, see if we can find one if (m_provider == null) { m_provider = (GroupProvider) ComponentManager.get(GroupProvider.class.getName()); } M_log.info( "init(): provider: " + ((m_provider == null) ? "none" : m_provider.getClass().getName())); } catch (Throwable t) { M_log.warn("init(); ", t); } }
public Object get(Object key) { // if we have this key exactly, use it Object value = m_wrapper.get(key); if (value != null) return value; // otherwise break up key as a compound id and find what values we have for these // the values are roles, and we prefer "maintain" to "access" String rv = null; String[] ids = m_provider.unpackId((String) key); for (int i = 0; i < ids.length; i++) { // try this one value = m_wrapper.get(ids[i]); // if we found one already, ask the provider which to keep if (value != null) { rv = m_provider.preferredRole((String) value, rv); } } return rv; }
/** {@inheritDoc} */ public void refreshUser(String userId) { if ((m_provider == null) || (userId == null)) return; try { String eid = userDirectoryService().getUserEid(userId); // wrap the provided map in our special map that will deal with compound provider ids Map providerGrants = new ProviderMap(m_provider, m_provider.getGroupRolesForUser(eid)); m_storage.refreshUser(userId, providerGrants); // update site security for this user - get the user's realms for the three site locks Set updAuthzGroups = getAuthzGroupsIsAllowed(userId, SiteService.SECURE_UPDATE_SITE, null); Set unpAuthzGroups = getAuthzGroupsIsAllowed(userId, SiteService.SITE_VISIT_UNPUBLISHED, null); Set visitAuthzGroups = getAuthzGroupsIsAllowed(userId, SiteService.SITE_VISIT, null); // convert from azGroup ids (potential site references) to site ids for those that are site, // skipping special and user sites other than our user's Set updSites = new HashSet(); for (Iterator i = updAuthzGroups.iterator(); i.hasNext(); ) { String azGroupId = (String) i.next(); Reference ref = entityManager().newReference(azGroupId); if ((SiteService.APPLICATION_ID.equals(ref.getType())) && SiteService.SITE_SUBTYPE.equals(ref.getSubType()) && !SiteService.isSpecialSite(ref.getId()) && (!SiteService.isUserSite(ref.getId()) || userId.equals(SiteService.getSiteUserId(ref.getId())))) { updSites.add(ref.getId()); } } Set unpSites = new HashSet(); for (Iterator i = unpAuthzGroups.iterator(); i.hasNext(); ) { String azGroupId = (String) i.next(); Reference ref = entityManager().newReference(azGroupId); if ((SiteService.APPLICATION_ID.equals(ref.getType())) && SiteService.SITE_SUBTYPE.equals(ref.getSubType()) && !SiteService.isSpecialSite(ref.getId()) && (!SiteService.isUserSite(ref.getId()) || userId.equals(SiteService.getSiteUserId(ref.getId())))) { unpSites.add(ref.getId()); } } Set visitSites = new HashSet(); for (Iterator i = visitAuthzGroups.iterator(); i.hasNext(); ) { String azGroupId = (String) i.next(); Reference ref = entityManager().newReference(azGroupId); if ((SiteService.APPLICATION_ID.equals(ref.getType())) && SiteService.SITE_SUBTYPE.equals(ref.getSubType()) && !SiteService.isSpecialSite(ref.getId()) && (!SiteService.isUserSite(ref.getId()) || userId.equals(SiteService.getSiteUserId(ref.getId())))) { visitSites.add(ref.getId()); } } SiteService.setUserSecurity(userId, updSites, unpSites, visitSites); } catch (UserNotDefinedException e) { M_log.warn("refreshUser: cannot find eid for user: " + userId); } }