thinkphp 의 Auth 클래스 인증 에 대한 자세 한 설명

6290 단어 thinkphpauth
RBAC 는 노드 에 따라 인증 을 하 는 것 입 니 다.노드 보다 더 가 는 권한 을 제어 하려 면 좀 어렵 습 니 다.예 를 들 어 페이지 위의 조작 단 추 는 사용자 권한 을 판단 하여 이 단 추 를 표시 하고 싶 습 니 다.권한 이 없 으 면 이 단 추 를 표시 하지 않 습 니 다.그리고 예 를 들 어 저 는 포인트 에 따라 권한 인증 을 하고 싶 습 니 다.포인트 가 0-100 일 때 무엇 을 할 수 있 고 101-200 일 때 무엇 을 할 수 있 습 니까?이런 권한 인증 은 RABC 로 도 어렵다.
다음은 Auth 권한 인증 을 소개 합 니 다.이 는 거의 만능 입 니 다.노드 인증 을 할 수 있 는 것 을 제외 하고 위 에서 말 한 RABC 가 인증 하기 어 려 운 두 가지 상황 을 모두 실현 할 수 있 습 니 다.
Auth 권한 인증 은 규칙 에 따라 인증 합 니 다.나 는 먼저 그것 의 원 리 를 말 하 겠 다.데이터베이스 에 규칙 표(thinkauth_rule),사용자 그룹 테이블(thinkauth_group),사용자 그룹 선명 표(thinkauth_group_access)
저 희 는 규칙 표 에서 권한 규칙 을 정의 합 니 다.사용자 그룹 표 에서 모든 사용자 그룹 에 어떤 권한 규칙 이 있 는 지 정의 하고 사용자 그룹 선명 표 에서 사용자 가 속 한 사용자 그룹 을 정의 합 니 다.다음은 예 를 들 어 설명 한다.
사용자 가 조작 단 추 를 표시 할 수 있 는 권한 이 있 는 지 판단 하려 면 먼저 규칙 을 정의 하고 규칙 표 에 show 라 는 이름 을 추가 합 니 다.button 의 규칙.그리고 사용자 그룹 테이블 에 사용자 그룹 을 추가 합 니 다.이 사용자 그룹 에 show 가 있다 고 정의 합 니 다.button 권한 규칙(thinkauth_group 표 에 rules 필드 가 저 장 될 때 규칙 ID,여러 개 를 쉼표 로 구분 합 니 다).그리고 사용자 그룹 내 역 표 에서 UID 를 1 로 정의 한 사용 자 는 방금 이 사용자 그룹 에 속 합 니 다.
ok,표 데이터 정의 후 판단 권한 이 간단 합 니 다.

import('ORG.Util.Auth');//    
    $auth=new Auth();
    if($auth->check('show_button',1)){//           ,        UID
     //          
   }else{
     //           
   }
Auth 클래스 역시 RBAC 와 같은 노드 를 인증 할 수 있 습 니 다.우 리 는 규칙 이름 을 노드 이름 으로 정의 하면 된다.
RABC 와 마찬가지 로 공공 컨트롤 러 CommonAction 에서 정의initialize 방법,

<?php
class CommonAction extends Action{
    public function _initialize(){
        import('ORG.Util.Auth');//    
        $auth=new Auth();
        if(!$auth->check(MODULE_NAME.'-'.ACTION_NAME,session('uid'))){
        $this->error('     ');
        }
    }
}
이때 데이터베이스 에 추가 할 수 있 는 노드 규칙 은'컨트롤 러 이름-방법 이름'입 니 다.
Auth 클래스 는 다음 과 같은 여러 규칙 을 함께 인증 할 수 있 습 니 다.

$auth->check('rule1,rule2',uid); 
인증 사용자 가 rule 1 의 권한 이나 rule 2 의 권한 만 있 으 면 하나의 규칙 적 인 권한 만 있 으 면 인증 반환 결 과 는 true 즉 인증 통과 임 을 나타 낸다.기본 여러 권한 의 관 계 는'or'관계 입 니 다.즉,여러 권한 중 하나의 권한 만 통과 하면 통과 합 니 다.저희 도"and"관계 라 고 정의 할 수 있 습 니 다.

$auth->check('rule1,rule2',uid,'and'); 
세 번 째 매개 변 수 는'and'로 지정 되 어 여러 규칙 이 and 관계 로 인증 하 는 것 을 나타 내 는데 이때 여러 규칙 이 동시에 인증 을 통과 해 야 권한 이 있 습 니 다.하나의 규칙 에 권한 이 없 으 면 false 로 돌아 갑 니 다.
Auth 인증,한 사용자 가 여러 사용자 그룹 에 속 할 수 있 습 니 다.예 를 들 어 저희 가 쇼button 이 규칙 을 인증 합 니 다.사용자 A 는 사용자 그룹 1 과 사용자 그룹 2 두 개의 사용자 그룹 에 속 하고 사용자 그룹 1 은 show 가 없습니다.button 규칙 권한,하지만 사용자 그룹 2 에 show 가 있다 면button 규칙 권한 은 인증 을 통과 할 수 있 습 니 다.

$auth->getGroups(uid)
위의 코드 를 통 해 사용자 가 속 한 모든 사용자 그룹 을 얻 을 수 있 고 저희 가 사이트 에 표시 할 수 있 습 니 다.
Auth 류 는 사용자 속성 에 따라 권한 을 판단 할 수 있 습 니 다.예 를 들 어 사용자 포인트 에 따라 판단 하고 우리 의 사용자 표(thinkmembers)필드 score 에 사용자 포 인 트 를 기록 하 였 습 니 다.
규칙 표 에 규칙 을 추가 할 때 규칙 표 의 condition 필드 를 정의 합 니 다.condition 필드 는 규칙 조건 입 니 다.기본 값 은 빈 것 으로 추가 조건 이 없 음 을 표시 합 니 다.사용자 그룹 에 서 는 규칙 만 인증 을 통과 합 니 다.condition 필드 를 정의 하면 사용자 그룹 에 인증 을 통과 할 수 있 는 규칙 이 있 지 않 고 프로그램 은 추가 조건 을 만족 시 킬 지 여 부 를 판단 합 니 다.
예 를 들 어 우 리 는 몇 가지 규칙 을 추가 합 니 다.
name 필드:grade 1,condition 필드:{score}<100
name 필드:grade 2,condition 필드:{score}>100 및{score}<200
name 필드:grade 3,condition 필드:{score}>200 및{score}<300
여기{score}은 thinkmembers 표 의 필드 score 값 입 니 다.
그러면 이때
$auth->check('grade 1',uid)은 사용자 포인트 가 0-100 인지 아 닌 지 판단 합 니 다.
$auth->check('grade 2',uid)은 사용자 포인트 가 100-200 인지 아 닌 지 판단 합 니 다.
$auth->check('grade 3',uid)은 사용자 포인트 가 200-300 인지 아 닌 지 판단 합 니 다.
Auth 류 인증 의 사용 방법 은 대체로 위 와 같 습 니 다.늦게 만난 것 을 원망 하 는 느낌 이 들 지 않 습 니까?
----------------------------------------------------
Auth 클래스 를 사용 하기 전에 config.php 를 설정 해 야 합 니 다.

'AUTH_CONFIG'=>array(
    'AUTH_ON' => true, //    
    'AUTH_TYPE' => 1, //     ,1     ;2     。
    'AUTH_GROUP' => 'think_auth_group', //       
    'AUTH_GROUP_ACCESS' => 'think_auth_group_access', //      
    'AUTH_RULE' => 'think_auth_rule', //     
    'AUTH_USER' => 'think_members'//     
)
데이터베이스 가 져 오기

-- ----------------------------
-- think_auth_rule,   ,
-- id:  ,name:      , title:       status   : 1  , 0  ,condition:     ,         ,           
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (  
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,  
    `name` char(80) NOT NULL DEFAULT '',  
    `title` char(20) NOT NULL DEFAULT '',  
    `status` tinyint(1) NOT NULL DEFAULT '1',  
    `condition` char(100) NOT NULL DEFAULT '',  
    PRIMARY KEY (`id`),  
    UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group     , 
-- id:  , title:       , rules:        id,     ","  ,status   : 1  , 0  
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group`;
CREATE TABLE `think_auth_group` ( 
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `title` char(100) NOT NULL DEFAULT '', 
    `status` tinyint(1) NOT NULL DEFAULT '1', 
    `rules` char(80) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access       
-- uid:  id,group_id:   id
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group_access`;
CREATE TABLE `think_auth_group_access` (  
    `uid` mediumint(8) unsigned NOT NULL,  
    `group_id` mediumint(8) unsigned NOT NULL, 
    UNIQUE KEY `uid_group_id` (`uid`,`group_id`),  
    KEY `uid` (`uid`), 
    KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
이상 은 thinkphp 의 Auth 류 인증 에 대한 상세 한 내용 입 니 다.thinkphp 의 Auth 류 인증 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기