forked from p85126437/datagear
AnalysisProject授权有变更时刷新数据集、图表、看板的权限缓存
This commit is contained in:
parent
c1b9722e82
commit
0eec052ed9
|
@ -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);
|
||||
|
||||
}
|
|
@ -18,7 +18,7 @@ import org.datagear.persistence.PagingQuery;
|
|||
* @author datagear@163.com
|
||||
*
|
||||
*/
|
||||
public interface AnalysisProjectAwareEntityService<T>
|
||||
public interface AnalysisProjectAwareEntityService<T> extends AnalysisProjectAuthorizationListener
|
||||
{
|
||||
String QUERY_PARAM_ANALYSIS_PROJECT_ID = "_analysisProjectId";
|
||||
|
||||
|
|
|
@ -207,12 +207,19 @@ public abstract class AbstractMybatisDataPermissionEntityService<ID, T extends D
|
|||
|
||||
@Override
|
||||
public void authorizationUpdated(String resourceType, String... resources)
|
||||
{
|
||||
authorizationUpdatedInner(resourceType, resources);
|
||||
}
|
||||
|
||||
protected boolean authorizationUpdatedInner(String resourceType, String... resources)
|
||||
{
|
||||
if (!getResourceType().equals(resourceType))
|
||||
return;
|
||||
return false;
|
||||
|
||||
for (String res : resources)
|
||||
this.permissionCache.evictImmediately(toPermissionCacheKeyOfStr(res));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* http://www.gnu.org/licenses/lgpl-3.0.html
|
||||
*/
|
||||
|
||||
package org.datagear.management.service.impl;
|
||||
|
||||
import org.datagear.management.service.AnalysisProjectAuthorizationListener;
|
||||
|
||||
/**
|
||||
* {@linkplain AnalysisProjectAuthorizationListener}相关类。
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
*/
|
||||
public interface AnalysisProjectAuthorizationListenerAware
|
||||
{
|
||||
/**
|
||||
* 获取{@linkplain AnalysisProjectAuthorizationListener}。
|
||||
*
|
||||
* @return 可能为{@code null}
|
||||
*/
|
||||
AnalysisProjectAuthorizationListener getAnalysisProjectAuthorizationListener();
|
||||
|
||||
/**
|
||||
* 设置{@linkplain AnalysisProjectAuthorizationListener}。
|
||||
*
|
||||
* @param analysisProjectAuthorizationListener 允许为{@code null}
|
||||
*/
|
||||
void setAnalysisProjectAuthorizationListener(
|
||||
AnalysisProjectAuthorizationListener analysisProjectAuthorizationListener);
|
||||
}
|
|
@ -10,6 +10,7 @@ package org.datagear.management.service.impl;
|
|||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.datagear.management.domain.AnalysisProject;
|
||||
import org.datagear.management.domain.User;
|
||||
import org.datagear.management.service.AnalysisProjectAuthorizationListener;
|
||||
import org.datagear.management.service.AnalysisProjectService;
|
||||
import org.datagear.management.service.AuthorizationService;
|
||||
import org.datagear.management.service.PermissionDeniedException;
|
||||
|
@ -24,12 +25,14 @@ import org.mybatis.spring.SqlSessionTemplate;
|
|||
*
|
||||
*/
|
||||
public class AnalysisProjectServiceImpl extends AbstractMybatisDataPermissionEntityService<String, AnalysisProject>
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -84,6 +84,17 @@ public class AuthorizationServiceImpl extends AbstractMybatisEntityService<Strin
|
|||
authorizationUpdated(entity.getResourceType(), entity.getResource());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(Authorization entity)
|
||||
{
|
||||
boolean updated = super.update(entity);
|
||||
|
||||
if (updated)
|
||||
authorizationUpdated(entity.getResourceType(), entity.getResource());
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteById(String id)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* http://www.gnu.org/licenses/lgpl-3.0.html
|
||||
*/
|
||||
|
||||
package org.datagear.management.service.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.datagear.management.service.AnalysisProjectAuthorizationListener;
|
||||
|
||||
/**
|
||||
* 打包一起的{@linkplain AnalysisProjectAuthorizationListener}。
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
*/
|
||||
public class BundleAnalysisProjectAuthorizationListener implements AnalysisProjectAuthorizationListener
|
||||
{
|
||||
private Collection<AnalysisProjectAuthorizationListener> analysisProjectAuthorizationListeners = null;
|
||||
|
||||
public BundleAnalysisProjectAuthorizationListener()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public BundleAnalysisProjectAuthorizationListener(
|
||||
Collection<AnalysisProjectAuthorizationListener> analysisProjectAuthorizationListeners)
|
||||
{
|
||||
super();
|
||||
this.analysisProjectAuthorizationListeners = analysisProjectAuthorizationListeners;
|
||||
}
|
||||
|
||||
public Collection<AnalysisProjectAuthorizationListener> getAnalysisProjectAuthorizationListeners()
|
||||
{
|
||||
return analysisProjectAuthorizationListeners;
|
||||
}
|
||||
|
||||
public void setAnalysisProjectAuthorizationListeners(
|
||||
Collection<AnalysisProjectAuthorizationListener> analysisProjectAuthorizationListeners)
|
||||
{
|
||||
this.analysisProjectAuthorizationListeners = analysisProjectAuthorizationListeners;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void authorizationUpdated(String... analysisProjects)
|
||||
{
|
||||
if (this.analysisProjectAuthorizationListeners == null)
|
||||
return;
|
||||
|
||||
for (AnalysisProjectAuthorizationListener al : this.analysisProjectAuthorizationListeners)
|
||||
al.authorizationUpdated(analysisProjects);
|
||||
}
|
||||
}
|
|
@ -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<String, Object> params)
|
||||
{
|
||||
|
|
|
@ -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<String, Object> params)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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<ContextRefreshedEvent>
|
|||
|
||||
initAuthorizationResourceServices(context);
|
||||
initAuthorizationListenerAwares(context);
|
||||
initAnalysisProjectAuthorizationListenerAwares(context);
|
||||
initServiceCaches(context);
|
||||
initDevotedDataExchangeServices(context);
|
||||
}
|
||||
|
@ -775,6 +779,23 @@ public class CoreConfig implements ApplicationListener<ContextRefreshedEvent>
|
|||
aware.setAuthorizationListener(listener);
|
||||
}
|
||||
|
||||
protected void initAnalysisProjectAuthorizationListenerAwares(ApplicationContext context)
|
||||
{
|
||||
Map<String, AnalysisProjectAuthorizationListener> listenerMap = context
|
||||
.getBeansOfType(AnalysisProjectAuthorizationListener.class);
|
||||
List<AnalysisProjectAuthorizationListener> listenerList = new ArrayList<AnalysisProjectAuthorizationListener>(
|
||||
listenerMap.size());
|
||||
listenerList.addAll(listenerMap.values());
|
||||
|
||||
BundleAnalysisProjectAuthorizationListener listener = new BundleAnalysisProjectAuthorizationListener(
|
||||
listenerList);
|
||||
|
||||
Map<String, AnalysisProjectAuthorizationListenerAware> awareMap = context
|
||||
.getBeansOfType(AnalysisProjectAuthorizationListenerAware.class);
|
||||
for (AnalysisProjectAuthorizationListenerAware aware : awareMap.values())
|
||||
aware.setAnalysisProjectAuthorizationListener(listener);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
protected void initServiceCaches(ApplicationContext context)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue