>  기사  >  백엔드 개발  >  CI Framework_php 기술의 후크를 통해 간단한 권한 제어 구현

CI Framework_php 기술의 후크를 통해 간단한 권한 제어 구현

WBOY
WBOY원래의
2016-05-16 20:26:13999검색

실제 상황에 따라 두 개의 파일이 필요합니다. 하나는 권한 제어 클래스인 Acl이고 다른 하나는 config 디렉터리에 있는 권한 구성 파일 acl.php입니다.

Acl 클래스는 application/hook/acl.php에 있습니다. application/config/config.php 파일을 통해 후크를 활성화하고 config 디렉터리에 Hook.php 파일을 구성합니다.

1. 후크 기능을 활성화합니다. config.php

코드 복사 코드는 다음과 같습니다.

/*
|------------------------------------------------- -------------
| 시스템 후크 활성화/비활성화
|------------------------------------------------- -------------
|
| '후크' 기능을 사용하려면 다음을 통해 활성화해야 합니다.
| 이 변수를 TRUE(부울)로 설정합니다. 자세한 내용은 사용자 가이드를 참조하세요.
|
*/
$config['enable_hooks'] = 참;

2. Hook.php 파일을 구성합니다

코드 복사 코드는 다음과 같습니다.

/*
------------------------------------------------- | - -------------
후크
------------------------------------------------- | - -------------
| 이 파일을 사용하면 코어를 해킹하지 않고 CI를 확장하기 위한 "후크"를 정의할 수 있습니다
| 파일 정보는 사용자 가이드를 참조하세요.
|
http://codeigniter.com/user_guide/general/hooks.html
|
*/
$hook['post_controller_constructor'] = 배열(
'클래스' => 'Acl',
'함수' => '인증',
'파일 이름' => 'acl.php',
'파일 경로' => '후크'
);

구체적인 매개변수 설명은 문서의 링크 주소를 참조하세요. 여기서 post_controller_constructor 값에 특히 주의하세요. 상황에 따라 다르게 선택할 수 있습니다.

3. 권한 구성 파일 acl.php를 작성하여 config 디렉터리에 넣습니다.

코드 복사 코드는 다음과 같습니다.

$config['AUTH'] = 배열(
SUPER_ADMIN => 배열(
         'admin' => array('index', 'logout'),
),
관리자 => 배열(
         'admin' => array('index', 'logout'),
),
게스트 => 배열(
         'admin' => array('index', 'logout'),
),
);

이것은 내 상황에 따른 정의일 뿐 실제 데이터에 근거한 것은 아닙니다. 또한 쉽게 로드하고 사용할 수 있도록 $config에 제출해야 하는 주요 변수 이름도 있습니다.

4. 특정 권한 제어 Acl 클래스 작성

코드 복사 코드는 다음과 같습니다.

Acl 클래스 {
    비공개 $url_model;
    비공개 $url_method;
    비공개 $CI;
    함수 Acl()
    {
        $this->CI =& get_instance();
        $this->CI->load->library('session');
        $this->url_model = $this->CI->uri->segment(1);
        $this->url_method = $this->CI->uri->segment(2);
    }
    함수 인증()
    {
        $user = $this->CI->session->userdata('USER');
        if(비어 있음($user))
            $user->상태 = 0;
        $this->CI->load->config('acl');
        $AUTH = $this->CI->config->item('AUTH');
        if(in_array($user->status, array_keys($AUTH))){
            $controllers = $AUTH[$user->상태];
            if(in_array($this->url_model, array_keys($controllers))){
                if(!in_array($this->url_method, $controllers[$this->url_model])){
                    show_error('您无权访问该功能,该错误已经被记录!点击返回');
                }
            }그밖에{
                show_error('您无权访问该模块,该错误已经被记录!点击返回');
            }
        }
        그 외
            show_error('错误적용户类型,该错误已经被记录!点击返回');
    }
}

整体上大体是这样적형형式, 最后还是要根据自己的实际情况来确定。

需要注의심스러운是:

复主代码 代码如下:

$this->CI =& get_instance();
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.