사용자가 api 를 만들수 있는지 여부를 설정 하도록 개선.
[Tadpole.git] / com.hangum.tadpole.commons.sql / src / com / hangum / tadpole / engine / permission / PermissionChecker.java
blob1ba17afbbb284e7a07983442fb96e7f3012bc983
1 /*******************************************************************************
2 * Copyright (c) 2013 hangum.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser Public License v2.1
5 * which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
7 *
8 * Contributors:
9 * hangum - initial API and implementation
10 ******************************************************************************/
11 package com.hangum.tadpole.engine.permission;
13 import java.util.List;
15 import org.apache.log4j.Logger;
17 import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
18 import com.hangum.tadpole.commons.libs.core.message.CommonMessages;
19 import com.hangum.tadpole.engine.define.TDBResultCodeDefine;
20 import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
21 import com.hangum.tadpole.engine.restful.TadpoleException;
22 import com.hangum.tadpole.engine.security.DBAccessCtlManager;
23 import com.hangum.tadpole.engine.sql.util.SQLUtil;
25 /**
26 * 사용자 혹은 사용자 쿼리의 권한을 검사합니다.
28 * @author hangum
31 public class PermissionChecker {
32 private static final Logger logger = Logger.getLogger(PermissionChecker.class);
33 /**
34 * db를 추가/삭제/수정 할 수 있는 권한이 있는지.
36 * @param userDB
37 * @return
39 public static boolean isDBAdminRole(UserDBDAO userDB) {
40 String strDBRole = userDB.getRole_id();
42 if(PublicTadpoleDefine.DB_USER_ROLE_TYPE.ADMIN.name().equals(strDBRole) ||
43 PublicTadpoleDefine.DB_USER_ROLE_TYPE.MANAGER.name().equals(strDBRole) ||
44 PublicTadpoleDefine.DB_USER_ROLE_TYPE.DBA.name().equals(strDBRole)) return true;
46 return false;
49 /**
50 * db 가 프러덕이거나 백업 디비이면.
51 * @param userDB
52 * @return
54 public static boolean isProductBackup(UserDBDAO userDB) {
55 String strDBType = userDB.getOperation_type();
57 if(PublicTadpoleDefine.DBOperationType.PRODUCTION.name().equals(strDBType) ||
58 PublicTadpoleDefine.DBOperationType.BACKUP.name().equals(strDBType)) {
59 return true;
62 return false;
65 /**
66 * 쿼리중에 하나라도 권한이 허락하지 않으면 false를 리턴합니다.
68 * @param strUserType
69 * @param userDB
70 * @param listStrExecuteQuery
71 * @return
73 public static void isExecute(String strUserType, UserDBDAO userDB, List<String> listStrExecuteQuery) throws TadpoleException {
74 // boolean isReturn = true;
76 for (String strQuery : listStrExecuteQuery) {
77 isExecute(strUserType, userDB, strQuery);
80 // return isReturn;
83 /**
84 * 쿼리가 실행 가능한지 검사합니다.
85 * {@code UserDBDAO}의 operation_type {@code PublicTadpoleDefine#DBOperationType}인 경우 {@code PublicTadpoleDefine#USER_ROLE_TYPE}에서 MANAGER, ADMIN 권한 만 실행 가능합니다.
87 * @param strUserType
88 * @param userDB
89 * @param strSQL
90 * @return
92 public static void isExecute(String strUserType, UserDBDAO userDB, String strSQL) throws TadpoleException {
93 // boolean boolReturn = false;
95 // if(SQLUtil.isNotAllowed(strSQL)) {
96 // return false;
97 // }
99 // 디비권한이 read only connection 옵션이 선택되었으면 statement문만 권한을 허락합니다.
100 if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDB.getIs_readOnlyConnect())) {
101 if(!SQLUtil.isStatement(strSQL)) throw new TadpoleException(TDBResultCodeDefine.UNAUTHENTICATED, CommonMessages.get().ThisIsReadOnlyDatabase);
104 // //
105 // // 유저가 일반 권한일 경우 프러덕션 디비의 수정을 할 수 없습니다.
106 // //
107 // PublicTadpoleDefine.DBOperationType opType = PublicTadpoleDefine.DBOperationType.valueOf(userDB.getOperation_type());
108 // if(opType != PublicTadpoleDefine.DBOperationType.PRODUCTION) {
109 // boolReturn = true;
110 // // real db라면
111 // } else {
112 // if(PublicTadpoleDefine.DB_USER_ROLE_TYPE.ADMIN.name().equals(strUserType) ||
113 // PublicTadpoleDefine.DB_USER_ROLE_TYPE.MANAGER.name().equals(strUserType) ||
114 // PublicTadpoleDefine.DB_USER_ROLE_TYPE.DBA.name().equals(strUserType)) boolReturn = true;
116 // // GUEST USER인 경우 SELECT 만 허락합니다.
117 // if(SQLUtil.isStatement(strSQL)) boolReturn = true;
118 // }
120 // try {
121 DBAccessCtlManager.getInstance().tableFilterTest(userDB, strSQL);
122 // } catch (Exception e) {
123 // logger.error("table filter exception", e);
124 // throw e;
125 // }
127 // return boolReturn;
131 * isadmin
133 * @param strUserType
134 * @return
136 public static boolean isUserAdmin(String strUserType) {
137 boolean boolReturn = false;
139 if(PublicTadpoleDefine.USER_ROLE_TYPE.SYSTEM_ADMIN.name().equals(strUserType)) {
140 boolReturn = true;
143 return boolReturn;
147 * is observer
149 * @param strUserType
150 * @return
152 public static boolean isUserObserver(String strUserType) {
153 boolean boolReturn = false;
155 if(PublicTadpoleDefine.USER_ROLE_TYPE.OBSERVER.name().equals(strUserType)) {
156 boolReturn = true;
159 return boolReturn;
163 * Manager이상의 권한이 있는 사용자만 보여준다.
165 * @param strUserType
166 * @return
168 public static boolean isDBAShow(String strUserType) {
169 boolean boolReturn = false;
171 if(PublicTadpoleDefine.DB_USER_ROLE_TYPE.ADMIN.toString().equals(strUserType) ||
172 PublicTadpoleDefine.DB_USER_ROLE_TYPE.MANAGER.toString().equals(strUserType) ||
173 PublicTadpoleDefine.DB_USER_ROLE_TYPE.DBA.toString().equals(strUserType)
175 boolReturn = true;
178 return boolReturn;
182 * 로그인타입에 따른 보여주어도 되는지
184 * @param strUserType
185 * @return
187 public static boolean isShow(String strUserType) {
188 boolean boolReturn = false;
190 if(PublicTadpoleDefine.DB_USER_ROLE_TYPE.ADMIN.toString().equals(strUserType) ||
191 PublicTadpoleDefine.DB_USER_ROLE_TYPE.MANAGER.toString().equals(strUserType) ||
192 PublicTadpoleDefine.DB_USER_ROLE_TYPE.DBA.toString().equals(strUserType)) {
193 boolReturn = true;
196 return boolReturn;
200 * 사용자가에 보여 주어도 되는 정보 인지 검사합니다.
202 * @param strUserType
203 * @param userDB
204 * @return
206 public static boolean isShow(String strUserType, UserDBDAO userDB) {
207 boolean boolReturn = false;
209 // 디비의 권한이 db type이 read only인 경우 보이지 않도록 합니다.
210 if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDB.getIs_readOnlyConnect())) return false;
212 // 유저의 권한를 검사합니다.
213 PublicTadpoleDefine.DBOperationType opType = PublicTadpoleDefine.DBOperationType.valueOf(userDB.getOperation_type());
214 // real db가 아니면 모든 사용 권한을 얻습니다.
215 if(opType != PublicTadpoleDefine.DBOperationType.PRODUCTION) {
216 return true;
218 // real db라면
219 } else {
220 if(PublicTadpoleDefine.DB_USER_ROLE_TYPE.ADMIN.name().equals(strUserType) ||
221 PublicTadpoleDefine.DB_USER_ROLE_TYPE.MANAGER.name().equals(strUserType) ||
222 PublicTadpoleDefine.DB_USER_ROLE_TYPE.DBA.name().equals(strUserType)) return true;
225 return boolReturn;
229 * 사용자가 action을 취할 수 있는지
231 * @param strUserType
232 * @param userDB
233 * @return
235 public static boolean isAction(String strUserType, UserDBDAO userDB) {
236 return isShow(strUserType, userDB);