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
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
;
26 * 사용자 혹은 사용자 쿼리의 권한을 검사합니다.
31 public class PermissionChecker
{
32 private static final Logger logger
= Logger
.getLogger(PermissionChecker
.class);
34 * db를 추가/삭제/수정 할 수 있는 권한이 있는지.
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;
50 * db 가 프러덕이거나 백업 디비이면.
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
)) {
66 * 쿼리중에 하나라도 권한이 허락하지 않으면 false를 리턴합니다.
70 * @param listStrExecuteQuery
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
);
85 * {@code UserDBDAO}의 operation_type {@code PublicTadpoleDefine#DBOperationType}인 경우 {@code PublicTadpoleDefine#USER_ROLE_TYPE}에서 MANAGER, ADMIN 권한 만 실행 가능합니다.
92 public static void isExecute(String strUserType
, UserDBDAO userDB
, String strSQL
) throws TadpoleException
{
93 // boolean boolReturn = false;
95 // if(SQLUtil.isNotAllowed(strSQL)) {
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
);
105 // // 유저가 일반 권한일 경우 프러덕션 디비의 수정을 할 수 없습니다.
107 // PublicTadpoleDefine.DBOperationType opType = PublicTadpoleDefine.DBOperationType.valueOf(userDB.getOperation_type());
108 // if(opType != PublicTadpoleDefine.DBOperationType.PRODUCTION) {
109 // boolReturn = true;
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;
121 DBAccessCtlManager
.getInstance().tableFilterTest(userDB
, strSQL
);
122 // } catch (Exception e) {
123 // logger.error("table filter exception", e);
127 // return boolReturn;
136 public static boolean isUserAdmin(String strUserType
) {
137 boolean boolReturn
= false;
139 if(PublicTadpoleDefine
.USER_ROLE_TYPE
.SYSTEM_ADMIN
.name().equals(strUserType
)) {
152 public static boolean isUserObserver(String strUserType
) {
153 boolean boolReturn
= false;
155 if(PublicTadpoleDefine
.USER_ROLE_TYPE
.OBSERVER
.name().equals(strUserType
)) {
163 * Manager이상의 권한이 있는 사용자만 보여준다.
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
)
182 * 로그인타입에 따른 보여주어도 되는지
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
)) {
200 * 사용자가에 보여 주어도 되는 정보 인지 검사합니다.
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;
213 PublicTadpoleDefine
.DBOperationType opType
= PublicTadpoleDefine
.DBOperationType
.valueOf(userDB
.getOperation_type());
214 // real db가 아니면 모든 사용 권한을 얻습니다.
215 if(opType
!= PublicTadpoleDefine
.DBOperationType
.PRODUCTION
) {
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;
229 * 사용자가 action을 취할 수 있는지
235 public static boolean isAction(String strUserType
, UserDBDAO userDB
) {
236 return isShow(strUserType
, userDB
);