/******************************************************************************* * Copyright (c) 2012 - 2015 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.engine.security; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.engine.define.DBGroupDefine; import com.hangum.tadpole.engine.query.dao.mysql.TableColumnDAO; import com.hangum.tadpole.engine.query.dao.mysql.TableDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.query.dao.system.accesscontrol.AccessCtlObjectDAO; /** * DBAccess Control manager * * @author hangum * @version 1.6.1 * @since 2015. 4. 2. * */ public class DBAccessCtlManager { private static final Logger logger = Logger.getLogger(DBAccessCtlManager.class); private static DBAccessCtlManager instance = null; /** * */ private DBAccessCtlManager() {} public static DBAccessCtlManager getInstance() { if(instance == null) { instance = new DBAccessCtlManager(); } return instance; } public List<TableDAO> getTableFilter(List<TableDAO> showTables, UserDBDAO userDB) { if(userDB.getDbAccessCtl().getMapSelectAccessCtl().isEmpty()) return showTables; List<TableDAO> returnTables = new ArrayList<TableDAO>(); returnTables.addAll(showTables); Map<String, AccessCtlObjectDAO> mapSelectAccessCtl = userDB.getDbAccessCtl().getMapSelectAccessCtl(); for (TableDAO tableDAO : showTables) { if(mapSelectAccessCtl.containsKey(tableDAO.getName())) { if(PublicTadpoleDefine.YES_NO.YES.name().equals(mapSelectAccessCtl.get(tableDAO.getName()).getDontuse_object())) { boolean bool = returnTables.remove(tableDAO); if(logger.isDebugEnabled()) logger.debug(tableDAO.getName() + " object removed."); } } } return returnTables; } /** * get column filter * * @param strTableName * @param listTableColumns * @param userDB * @return */ public List<TableColumnDAO> getColumnFilter(TableDAO tableDao, List<TableColumnDAO> listTableColumns, UserDBDAO userDB) { if(userDB.getDbAccessCtl().getMapSelectAccessCtl().isEmpty()) return listTableColumns; List<TableColumnDAO> returnColumns = new ArrayList<TableColumnDAO>(); returnColumns.addAll(listTableColumns); String strTableName = ""; if(DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()) strTableName = tableDao.getSysName(); else strTableName = tableDao.getName(); // db access control Map<String, AccessCtlObjectDAO> mapSelectAccessCtl = userDB.getDbAccessCtl().getMapSelectAccessCtl(); if(mapSelectAccessCtl.containsKey(strTableName)) { AccessCtlObjectDAO accessCtlObjectDao = mapSelectAccessCtl.get(strTableName); for (TableColumnDAO tableColumnDAO : listTableColumns) { if(StringUtils.containsIgnoreCase(accessCtlObjectDao.getDetail_obj(), tableColumnDAO.getField())) { returnColumns.remove(tableColumnDAO); } } } return returnColumns; } }