diff --git a/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAuthorizationListener.java b/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAuthorizationListener.java new file mode 100644 index 00000000..5a5108b4 --- /dev/null +++ b/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAuthorizationListener.java @@ -0,0 +1,27 @@ +/* + * Copyright 2018 datagear.tech + * + * Licensed under the LGPLv3 license: + * http://www.gnu.org/licenses/lgpl-3.0.html + */ + +package org.datagear.management.service; + +import org.datagear.management.domain.AnalysisProject; + +/** + * {@linkplain AnalysisProject}授权监听器。 + * + * @author datagear@163.com + * + */ +public interface AnalysisProjectAuthorizationListener +{ + /** + * 指定ID的{@linkplain AnalysisProject}授权已更新。 + * + * @param analysisProjects + */ + void authorizationUpdated(String... analysisProjects); + +} diff --git a/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAwareEntityService.java b/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAwareEntityService.java index 1275a9d1..b061ae8f 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAwareEntityService.java +++ b/datagear-management/src/main/java/org/datagear/management/service/AnalysisProjectAwareEntityService.java @@ -18,7 +18,7 @@ import org.datagear.persistence.PagingQuery; * @author datagear@163.com * */ -public interface AnalysisProjectAwareEntityService +public interface AnalysisProjectAwareEntityService extends AnalysisProjectAuthorizationListener { String QUERY_PARAM_ANALYSIS_PROJECT_ID = "_analysisProjectId"; diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/AbstractMybatisDataPermissionEntityService.java b/datagear-management/src/main/java/org/datagear/management/service/impl/AbstractMybatisDataPermissionEntityService.java index 1892fc74..4d3c81c0 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/AbstractMybatisDataPermissionEntityService.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/AbstractMybatisDataPermissionEntityService.java @@ -207,12 +207,19 @@ public abstract class AbstractMybatisDataPermissionEntityService - implements AnalysisProjectService + implements AnalysisProjectService, AnalysisProjectAuthorizationListenerAware { protected static final String SQL_NAMESPACE = AnalysisProject.class.getName(); private UserService userService; + private AnalysisProjectAuthorizationListener analysisProjectAuthorizationListener = null; + public AnalysisProjectServiceImpl() { super(); @@ -49,6 +52,29 @@ public class AnalysisProjectServiceImpl extends AbstractMybatisDataPermissionEnt this.userService = userService; } + public UserService getUserService() + { + return userService; + } + + public void setUserService(UserService userService) + { + this.userService = userService; + } + + @Override + public AnalysisProjectAuthorizationListener getAnalysisProjectAuthorizationListener() + { + return analysisProjectAuthorizationListener; + } + + @Override + public void setAnalysisProjectAuthorizationListener( + AnalysisProjectAuthorizationListener analysisProjectAuthorizationListener) + { + this.analysisProjectAuthorizationListener = analysisProjectAuthorizationListener; + } + @Override public String getResourceType() { @@ -74,6 +100,15 @@ public class AnalysisProjectServiceImpl extends AbstractMybatisDataPermissionEnt return super.postProcessGet(obj); } + @Override + public void authorizationUpdated(String resourceType, String... resources) + { + boolean updated = authorizationUpdatedInner(resourceType, resources); + + if (updated && this.analysisProjectAuthorizationListener != null) + this.analysisProjectAuthorizationListener.authorizationUpdated(resources); + } + @Override protected void checkAddInput(AnalysisProject entity) { diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/AuthorizationServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/AuthorizationServiceImpl.java index 9b42737c..a4499044 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/AuthorizationServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/AuthorizationServiceImpl.java @@ -84,6 +84,17 @@ public class AuthorizationServiceImpl extends AbstractMybatisEntityService analysisProjectAuthorizationListeners = null; + + public BundleAnalysisProjectAuthorizationListener() + { + super(); + } + + public BundleAnalysisProjectAuthorizationListener( + Collection analysisProjectAuthorizationListeners) + { + super(); + this.analysisProjectAuthorizationListeners = analysisProjectAuthorizationListeners; + } + + public Collection getAnalysisProjectAuthorizationListeners() + { + return analysisProjectAuthorizationListeners; + } + + public void setAnalysisProjectAuthorizationListeners( + Collection analysisProjectAuthorizationListeners) + { + this.analysisProjectAuthorizationListeners = analysisProjectAuthorizationListeners; + } + + @Override + public void authorizationUpdated(String... analysisProjects) + { + if (this.analysisProjectAuthorizationListeners == null) + return; + + for (AnalysisProjectAuthorizationListener al : this.analysisProjectAuthorizationListeners) + al.authorizationUpdated(analysisProjects); + } +} diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/DataSetEntityServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/DataSetEntityServiceImpl.java index bb099aa3..7c54ff66 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/DataSetEntityServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/DataSetEntityServiceImpl.java @@ -232,6 +232,12 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit return pagingQueryForAnalysisProjectId(user, pagingQuery, dataFilter, analysisProjectId, true); } + @Override + public void authorizationUpdated(String... analysisProjects) + { + permissionCacheInvalidate(); + } + @Override protected void add(DataSetEntity entity, Map params) { diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlChartWidgetEntityServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlChartWidgetEntityServiceImpl.java index 28824ff4..e3369964 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlChartWidgetEntityServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlChartWidgetEntityServiceImpl.java @@ -206,6 +206,12 @@ public class HtmlChartWidgetEntityServiceImpl return pagingQueryForAnalysisProjectId(user, pagingQuery, dataFilter, analysisProjectId, true); } + @Override + public void authorizationUpdated(String... analysisProjects) + { + permissionCacheInvalidate(); + } + @Override protected void add(HtmlChartWidgetEntity entity, Map params) { diff --git a/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlTplDashboardWidgetEntityServiceImpl.java b/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlTplDashboardWidgetEntityServiceImpl.java index 858d1815..5fc68a60 100644 --- a/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlTplDashboardWidgetEntityServiceImpl.java +++ b/datagear-management/src/main/java/org/datagear/management/service/impl/HtmlTplDashboardWidgetEntityServiceImpl.java @@ -139,6 +139,12 @@ public class HtmlTplDashboardWidgetEntityServiceImpl return pagingQueryForAnalysisProjectId(user, pagingQuery, dataFilter, analysisProjectId, true); } + @Override + public void authorizationUpdated(String... analysisProjects) + { + permissionCacheInvalidate(); + } + @Override protected HtmlTplDashboardWidgetEntity postProcessGet(HtmlTplDashboardWidgetEntity obj) { diff --git a/datagear-web/src/main/java/org/datagear/web/config/CoreConfig.java b/datagear-web/src/main/java/org/datagear/web/config/CoreConfig.java index 616ff2b5..9799f503 100644 --- a/datagear-web/src/main/java/org/datagear/web/config/CoreConfig.java +++ b/datagear-web/src/main/java/org/datagear/web/config/CoreConfig.java @@ -50,6 +50,7 @@ import org.datagear.dataexchange.support.JsonDataImportService; import org.datagear.dataexchange.support.SqlDataExportService; import org.datagear.dataexchange.support.SqlDataImportService; import org.datagear.management.dbversion.DbVersionManager; +import org.datagear.management.service.AnalysisProjectAuthorizationListener; import org.datagear.management.service.AnalysisProjectService; import org.datagear.management.service.AuthorizationListener; import org.datagear.management.service.AuthorizationService; @@ -64,9 +65,11 @@ import org.datagear.management.service.SqlHistoryService; import org.datagear.management.service.UserService; import org.datagear.management.service.impl.AbstractMybatisDataPermissionEntityService; import org.datagear.management.service.impl.AbstractMybatisEntityService; +import org.datagear.management.service.impl.AnalysisProjectAuthorizationListenerAware; import org.datagear.management.service.impl.AnalysisProjectServiceImpl; import org.datagear.management.service.impl.AuthorizationListenerAware; import org.datagear.management.service.impl.AuthorizationServiceImpl; +import org.datagear.management.service.impl.BundleAnalysisProjectAuthorizationListener; import org.datagear.management.service.impl.BundleAuthorizationListener; import org.datagear.management.service.impl.DataSetEntityServiceImpl; import org.datagear.management.service.impl.DataSetResDirectoryServiceImpl; @@ -746,6 +749,7 @@ public class CoreConfig implements ApplicationListener initAuthorizationResourceServices(context); initAuthorizationListenerAwares(context); + initAnalysisProjectAuthorizationListenerAwares(context); initServiceCaches(context); initDevotedDataExchangeServices(context); } @@ -775,6 +779,23 @@ public class CoreConfig implements ApplicationListener aware.setAuthorizationListener(listener); } + protected void initAnalysisProjectAuthorizationListenerAwares(ApplicationContext context) + { + Map listenerMap = context + .getBeansOfType(AnalysisProjectAuthorizationListener.class); + List listenerList = new ArrayList( + listenerMap.size()); + listenerList.addAll(listenerMap.values()); + + BundleAnalysisProjectAuthorizationListener listener = new BundleAnalysisProjectAuthorizationListener( + listenerList); + + Map awareMap = context + .getBeansOfType(AnalysisProjectAuthorizationListenerAware.class); + for (AnalysisProjectAuthorizationListenerAware aware : awareMap.values()) + aware.setAnalysisProjectAuthorizationListener(listener); + } + @SuppressWarnings("rawtypes") protected void initServiceCaches(ApplicationContext context) {