매우 간단하고 실용적인 컨트롤러 기본 클래스
- /**
- * @desc 컨트롤러 기본 클래스
- * @date 2013-05-06
- * @author liudesheng
- */
- defined('SYS_PATH') || die('액세스 불법');
- class Controller
- {
- //현재 컨트롤러
- protected $_controller;
- //현재 작업 메서드
- protected $_action;
- //권한 배열
- protected $_permissions;
- //템플릿 파일
- private $_layout = 'layout';
- //생성자 함수
- function __construct($controller,$action)
- {
- if('예외' != $controller){
- $this->_controller = $controller;
- $this->_action = $action;
-
- //로그인 확인 및 접근 권한 제어 부분, 로그인 The 페이지 확인이 필요하지 않습니다
- $trust_action = util::c('trust_action');
- if(!isset($trust_action[$this->_controller]) || !in_array($this-> _action ,$trust_action[$this->_controller])){
- $this->login();
- //$this->privilege();
- }
- $this - >init();
- }else{//예외 처리
- $this->Exception($action);
- }
- }
-
- //초기화 방법, 상속 작업에서 사용
- 보호 함수 init(){}
-
- //예외 처리 방법
- 개인 함수 예외($msg)
- {
- $this->showErr($ msg ,$layout);
- }
-
- //로그인 확인
- 비공개 함수 login()
- {
- if(!$this->isLogin()){
- if($this->isAjax()){
- header('HTTP/1.1 403 Forbidden');
- header("Error-Json:{code:'login'}"); 종료 ();
- }else{
- $this->redirect('index','login');
- }
- }
- }
-
- //판사 Login
- 보호된 최종 함수 isLogin()
- {
- $auth = isset($_COOKIE['auth'])?$_COOKIE['auth']:'';
- $isLogin = false인지 여부 ;
- if($auth){
- $info = Trim(file_get_contents('check.txt'));
- if(strcmp($auth,md5('steve'.$info.util:: c ('login_auth_suffix'))) == 0){
- $isLogin = true;
- }
- }
- return $isLogin;
- }
-
- //권한 확인
- 비공개 함수 권한()
- {
- $this->getPermissions();
- if(!$this->isAllow()){
- if($this-> isAjax ()){
- header('HTTP/1.1 403 Forbidden');
- header( "Error-Json:{code:'access'}")
- exit();
- } else {
- $this->showErr('죄송합니다. 이 권한이 없습니다.');
- }
- }
- }
-
- //권한 정보 가져오기
- 보호된 최종 함수 getPermissions()
- {
- $privilege = $this->admin['privilege'];
- $permissions_priv = util::c('permissions',$privilege);
- if(!isset($permissions_priv['city'])){
- $this->cityPriv = 'all'; //목록 쿼리를 단순화하기 위해 모든 도시 권한 선택 항목을 future
- }else{
- unset($permissions_priv['city']);
- }
- foreach($permissions['common'] as $ct => $ac){
- if(isset($permissions_priv[$ct] ) && 'all' == $permissions_priv[$ct])
- 계속;
- if('all' == $ac)
- $permissions_priv[$ct ] = 'all';
- else //이 상황은 배열이어야 하며 리소스를 절약하고 판단할 필요가 없습니다.
- $permissions_priv[$ct] = isset($permissions_priv[$ct])?array_merge($permissions_priv[$ ct],$ac):$ ac;
- }
- $this->_permissions = $permissions_priv;
- }
-
- //권한 유형에 따라 권한 유무 판단
- 보호된 최종 함수 isAllow($controller=' ',$action='')
- {
- if(!isset($this->_permissions))
- $this->getPermissions() ;
- $allow = false;
- $ct = $controller?$controller:$this->_controller;
- $ac = $action?$action:$this->_action;
- $permission_action = $this->_permissions[$ ct];
- if($permission_action && ('all' == $permission_action || in_array($ac,$permission_action) || 'any' == $action) )
- $allow = true;
- return $allow;
- }
-
-
- //오류 메시지 페이지
- protected function showErr($errMsg,$layout = null)
- {
- $this-> title = "오류 메시지";
- $this->errMsg = $errMsg;
- $this->render('error',$layout);
- }
-
- // 성공 정보 페이지
- protected function showSucc($msg,$skipUrl,$skipPage,$layout = null)
- {
- $this->title = " 성공 팁";
- $this-> ;msg = $msg;
- $this->skipUrl = $skipUrl;
- $this->skipPage = $skipPage;
- $this-> ;render('success',$layout);
- }
-
- //허가된 링크 표시
- 보호 함수 showPemissionLink($title,$ct,$ac,$param=array(),$ Wrap='')
- {
- if($wrap){
- $wrap_start = '<'.$wrap.'>';
- $wrap_end = ''.$ Wrap.'>';
- }else{
- $wrap_start = $wrap_end = '';
- }
- if($this->isAllow($ct,$ac))
- echo $wrap_start,'',$title,'',$wrap_end;
- }
-
- //视图解析방법
- 보호 함수 render($template = null,$ 레이아웃 = null)
- {
- !is_null($layout) && $this->_layout = $layout;
- !$template && $template = $this->_controller.'_'.$ this->_action;
- ob_start();
- include(MODULE_PATH.'views/'.$this->_layout.'.tpl.php');
- $content = ob_get_clean();
- if($this->staticFile){
- file_put_contents($this->staticFile,$content);
- }
- echo $content;
- exit;
- }
-
- 보호된 함수 showHtml($html,$expire=3600,$path='')
- {
- 비어 있음($path) && $path=ROOT_PATH;
- $this->staticFile = sprintf('%s%s.html',$path,$html);
- $mkhtml = intval($this->_G('mkhtml'));
- if(!$mkhtml){
- if(file_exists($this->staticFile)){
- $fmtime = filemtime($this->staticFile);
- if(time()-$fmtime < $expire && date( 'Ymd') == 날짜('Ymd',$fmtime)){
- include $this->staticFile;
- 종료;
- }
- }
- }
- }
-
- //生成url
- 보호 함수 url($ct='',$ac='',$param = array(),$module='')
- {
- return $ GLOBALS['app']->url($ct,$ac,$param,$module);
- }
-
- //url跳转
- 보호 함수 리디렉션($ct=' ',$ac='',$param = array())
- {
- header('location:'.$this->url($ct,$ac,$param));
- exit();
- }
-
- //url跳转
- 보호 함수 리디렉션Url($url)
- {
- header('location:'.$url);
- exit();
- }
-
- //获取뒤로 리디렉션 URL
- 보호 함수 getBru()
- {
- return $_COOKIE[util::c('bru_cookie_name')]? $_COOKIE[util::c('bru_cookie_name')]:$this->url();
- }
-
- //是否是ajax请求
- 보호 함수 isAjax()
- {
- if(isset( $_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
- return true;
- return false;
- }
-
- //返回json数组
- 보호 함수 returnJson($data)
- {
- echo json_encode($data);
- exit();
- }
-
- // GET
- 보호 함수 _G($name)
- {
- return isset($_GET[$name])?util::sanitize($_GET[$name]):'';
- }
- //POST
- 보호 함수 _P($name)
- {
- if(!isset($_POST[$name]) || (is_string($_POST[$name]) && mb_strpos($_POST[$name],'请输入',0,'gbk') === 0)){
- return '';
- }else {
- return util::sanitize($_POST[$name]);
- }
- }
- //REQUEST
- 보호 함수 _R($name)
- {
- return isset($_REQUEST[$name])?util::sanitize($_REQUEST[$name]):'';
- }
- }
-
复主代码
|