HANYANG_REACT/lib/app/auth.class.php

281 lines
8.4 KiB
PHP

<?php
class Auth extends BaseCode {
function __construct(){
parent::__construct();
$this->DB->query_record = false; //query log 기록 금지
$this->DB->tableExists(TB_auth_manage);
}
/** 권한저장
* @param $cate_area : 권한범위
* @param $cate_id : 권한 기능(메뉴)
* @param $auth_area : 권한 그룹
* @param $auth_target : 권한 대상
* @param $auth : 권한
* @return bool
*/
public function putAuth( $cate_area, $cate_id, $auth_area, $auth_target, $auth ){
$sql_row = Array(
"cate_area" => $cate_area?:"",
"cate_id" => $cate_id?:"",
"auth_area" => $auth_area?:"",
"auth_target"=> $auth_target?:"",
"auth" => $auth?:"",
"reg_date" => $this->DB->sqleval("getdate()"),
"mod_date" => $this->DB->sqleval("getdate()"),
"mod_id" => $GLOBALS['_Umem']['member_id']?:"",
);
return $this->DB->insert(TB_auth_manage, $sql_row);
}
/** 권한수정
* @param $cate_area : 권한범위
* @param $cate_id : 권한 기능(메뉴)
* @param $auth_area : 권한 그룹
* @param $auth_target : 권한 대상
* @param $auth : 권한
* @param string $old_cate_id : 수정할 id
* @return bool
*/
public function setAuth( $cate_area, $cate_id, $auth_area, $auth_target, $auth, $old_cate_id="" ){
$sql_row = Array(
"auth" => $auth?:"",
"mod_date" => $this->DB->sqleval("getdate()"),
"mod_id" => $GLOBALS['_Umem']['member_id']?:"",
);
if( $old_cate_id && $cate_id != $old_cate_id ){
$sql_row['cate_id'] = $cate_id;
}
$where = new DB_where("and");
$where->add("cate_area = ?", $cate_area);
$where->add("cate_id = ?", $old_cate_id?:$cate_id);
$where->add("auth_area = ?", $auth_area);
$where->add("auth_target = ?", $auth_target);
$wqry = $where->get_where();
$whereqry = $wqry['qry'];
$whererow = $wqry['val'];
$ins_sql_row = Array(
"cate_area" => $cate_area?:"",
"cate_id" => $cate_id?:"",
"auth_area" => $auth_area?:"",
"auth_target"=> $auth_target?:"",
"auth" => $auth?:"",
"reg_date" => $this->DB->sqleval("getdate()"),
"mod_date" => $this->DB->sqleval("getdate()"),
"mod_id" => $GLOBALS['_Umem']['member_id']?:"",
);
return $this->DB->insertupdate(TB_auth_manage, $ins_sql_row, $sql_row, $whereqry, $whererow);
// $sql = "select count(*) from ".TB_auth_manage." where {$whereqry}";
// $cnt = $this->DB->queryFirstField($sql, $whererow);
//
// if( $cnt ){
// return $this->DB->update(TB_auth_manage, $sql_row, $whereqry, $whererow);
// }else{
// return $this->putAuth($cate_area, $cate_id, $auth_area, $auth_target, $auth);
// }
}
/* 주석은 시간날때.. 하지만 언제나 시간은 없지
* 권한추가
* */
public function addAuth( $cate_area, $cate_id, $auth_area, $auth_target, $auth ){
$auth = (int)$auth;
if( $auth > 7 || $auth < 0 ) return false;
return $this->setAuth( $cate_area, $cate_id, $auth_area, $auth_target, $this->DB->sqleval("auth | {$auth}") );
}
/*
* 권한제거
* */
public function remAuth( $cate_area, $cate_id, $auth_area, $auth_target, $auth ){
$auth = (int)$auth;
if( $auth > 7 || $auth < 0 ) return false;
return $this->setAuth( $cate_area, $cate_id, $auth_area, $auth_target, $this->DB->sqleval("auth & ".(7 ^ $auth)) );
}
/*
* 권한삭제
* */
public function delAuth( $cate_area, $cate_id, $auth_area="", $auth_target="" ){
$where = new DB_where("and");
$where->add("cate_area = ?", $cate_area);
$where->add("cate_id = ?", $cate_id);
if( $auth_area ){
$where->add("auth_area = ?", $auth_area);
}
if( $auth_target ){
$where->add("auth_target = ?", $auth_target);
}
$wqry = $where->get_where();
$whereqry = $wqry['qry'];
$whererow = $wqry['val'];
return $this->DB->delete(TB_auth_manage, $whereqry, $whererow);
}
/**
* @param $cate_area
* @param $cate_id
* @param string $auth_target
* @return int
*/
public function getAuthList( $cate_area="" ){
$where = new DB_where("and");
if( $cate_area ){
$where->add("cate_area = ?", $cate_area);
}
$wqry = $where->get_where();
$whereqry = $wqry['qry'];
$whererow = $wqry['val'];
$sql = "select cate_id, auth_area, auth_target, auth from ".TB_auth_manage." where {$whereqry}";
$rst = $this->DB->qry($sql, $whererow);
if( $rst ) {
$rows = array();
while ($row = $this->DB->fetch_array($rst)) {
$rows[$row['cate_id']][$row['auth_area']][$row['auth_target']] = $this->getAuthToRow($row['auth']);
}
return $rows;
}
return $rst;
}
/** 회원권한조회 - 회원이 가진 (현메뉴)에서 가진 권한값 리턴
* @param $cate_area : 권한범위
* @param $cate_id : 권한 기능(메뉴)
* @param string $auth_target : member_id, //Todo: 그룹권한만 확인하는 내용은 존재하지 않음
* @return int
*/
public function getAuth( $cate_area, $cate_id, $auth_target="" ){
if( !$auth_target ){
$mem = $GLOBALS['_Umem'];
$auth_target = isset($mem['member_id'])?$mem['member_id']:"";
}else{
$mobj = new Member();
$mem = $mobj->getMember($auth_target);
}
if( !isset($mem) || !$mem || !isset($mem['member_id']) || !$mem['member_id'] ){
if( !is_array($mem) ){
$mem = array();
}
$mem['member_auth'] = "Y"; //비회원
}
if( $mem['member_auth'] == 'SA' ) return 7; //슈퍼관리자는 무조건 Ok
$where = new DB_where("and");
$where->add("cate_area = ?", $cate_area);
$where->add("cate_id = ?", $cate_id);
$subwhere = $where->sub_where("or");
$subwhere2 = $subwhere->sub_where("and");
$subwhere2->add("auth_area = ?","G");
$subwhere2->add("auth_target = ?",$mem['member_auth']);
$subwhere3 = $subwhere->sub_where("and");
$subwhere3->add("auth_area = ?","M");
$subwhere3->add("auth_target = ?",$mem['member_id']);
$wqry = $where->get_where();
$whereqry = $wqry['qry'];
$whererow = $wqry['val'];
$sql = "select auth from ".TB_auth_manage." where {$whereqry}";
$rows = $this->DB->query($sql, $whererow);
$auth = 0;
foreach( (array)$rows as $row ){
$auth = $auth | $row['auth'];
}
//권한 제거 가 존재한다면(예: 레벨권한, 그룹권한으로 권한을 획득했지만 해당 인원만 쓰기 금지.)... 아래 로직을 적절하게 적용한다.
// $dauth <-- 제거할 권한(예: 7->모든 권한 제거, 4->수정삭제권한 제거, 2->쓰기권한제거, 1->읽기권한 제거)
// $auth = $auth & ~$dauth;
return $auth;
}
/** 권한 Normalize
* @param $auth
* @return int
*/
public function normalAuth($auth){
$auth = strtolower($auth);
switch( true ){
case in_array( $auth, Array("r", "read", "1", 1) ) :
$auth = 1; break;
case in_array( $auth, Array("w", "write", "put", "2", 2) ) :
$auth = 2; break;
case in_array( $auth, Array("u", "up", "update", "m", "mod", "modify", "set", "d", "del", "delete", "4", 4) ) :
$auth = 4; break;
default :
$auth = 0;
}
return $auth;
}
/** 권한확인
* @param $auth : 권한
* @param $cate_area : 권한범위
* @param $cate_id : 권한 기능(메뉴)
* @param string $auth_target : member_id, //Todo: 그룹권한만 확인하는 내용은 존재하지 않음
* @return int
*/
public function hasAuth( $auth, $cate_area, $cate_id, $auth_target="" ){
$allow = $this->getAuth($cate_area, $cate_id, $auth_target);
$auth = $this->normalAuth($auth);
return $auth & $allow;
}
/** 권한 get num -> row
* @param $auth : 권한
* @return array
*/
public function getAuthToRow($auth){
$arow = Array();
$arow["R"] = (bool)($auth & 1);
$arow["W"] = (bool)($auth & 2);
$arow["D"] = (bool)($auth & 4);
return $arow;
}
/*
* 권한 get row(string) -> num
* */
public function getAuthToNum($read, $write, $delete){
return ($read?1:0)+($write?2:0)+($delete?4:0);
}
/** 해당 권한을 가진 id get
* @param $row : 권한 배열
* @param $auth : 찾아낼 권한
* @return array
*/
public function getHasAuthRow( $row, $auth ){
$auth = $this->normalAuth($auth);
$rerow = array();
foreach( (array)$row as $k => $v ){
if( $v & $auth ){
$rerow[] = $k;
}
}
return $rerow;
}
}