001package org.nuxeo.ecm.multi.tenant; 002 003import org.nuxeo.ecm.core.api.DocumentModel; 004import org.nuxeo.ecm.core.api.event.DocumentEventTypes; 005import org.nuxeo.ecm.core.api.model.Property; 006import org.nuxeo.ecm.core.event.Event; 007import org.nuxeo.ecm.core.event.EventListener; 008import org.nuxeo.ecm.core.event.impl.DocumentEventContext; 009import org.nuxeo.ecm.platform.usermanager.UserManagerImpl; 010import org.nuxeo.runtime.api.Framework; 011import org.nuxeo.runtime.services.event.EventService; 012 013/** 014 * Listeners invalidating the principals cache when the tenant administrators are changed. 015 * 016 * @since 5.9.2 017 */ 018public class TenantAdministratorsListener implements EventListener { 019 020 @Override 021 public void handleEvent(Event event) { 022 String eventName = event.getName(); 023 if (!DocumentEventTypes.BEFORE_DOC_UPDATE.equals(eventName) 024 || !(event.getContext() instanceof DocumentEventContext)) { 025 return; 026 } 027 028 DocumentEventContext docCtx = (DocumentEventContext) event.getContext(); 029 DocumentModel doc = docCtx.getSourceDocument(); 030 if (doc.hasFacet(Constants.TENANT_CONFIG_FACET)) { 031 Property property = doc.getProperty(Constants.TENANT_ADMINISTRATORS_PROPERTY); 032 if (property.isDirty()) { 033 // flush the principals cache 034 EventService eventService = Framework.getLocalService(EventService.class); 035 eventService.sendEvent(new org.nuxeo.runtime.services.event.Event(UserManagerImpl.USERMANAGER_TOPIC, 036 "invalidateAllPrincipals", null, null)); 037 } 038 } 039 } 040 041}