>PHP 프레임워크 >ThinkPHP >thinkphp에서 권한 인증을 사용하는 방법

thinkphp에서 권한 인증을 사용하는 방법

WBOY
WBOY원래의
2023-05-26 14:36:081077검색

인터넷이 지속적으로 발전함에 따라 웹사이트 사용자 수가 증가하고 있습니다. 사용자 데이터를 보다 잘 관리하고 보안을 보장하기 위해 권한 인증은 모든 웹사이트의 필수 기능 중 하나가 되었습니다. PHP 프레임워크 중 ThinkPHP는 매우 인기 있는 프레임워크이며 완전한 권한 인증 기능도 제공합니다. 그래서 이번 글에서는 ThinkPHP가 권한 인증을 어떻게 사용하는지 자세히 소개하겠습니다.

1. 권한 인증의 역할

권한 인증은 주로 사용자가 액세스 권한이 있는 리소스에만 액세스할 수 있고 권한 이상으로 사용할 수 없도록 다양한 역할의 사용자에 대한 권한을 제어하는 ​​데 사용됩니다. 예를 들어, 전자상거래 사이트에서 관리자는 모든 상품정보를 조회하고 관리할 수 있지만, 일반 사용자는 상품정보를 조회만 할 수 있고 수정하거나 삭제할 수는 없습니다.

2. 권한 인증 구현 방법

ThinkPHP 프레임워크는 권한 인증을 구현하는 두 가지 방법인 RBAC와 노드 기반 권한 인증을 제공합니다. RBAC(Role-Based Access Control), 즉 역할 기반 액세스 제어는 역할에 따라 다양한 사용자를 분류합니다. 노드 기반 권한 인증은 노드를 통해 권한을 제어하며, 컨트롤러, 운영 방식 등이 될 수 있습니다.

  1. RBAC

프레임워크에서 RBAC를 통해 권한 인증을 구현하려면 ThinkPHPLibraryThink에 있는 Auth 클래스를 사용해야 합니다. 구체적인 단계는 다음과 같습니다.

(1) 노드 테이블과 역할 테이블을 생성하고 권한 노드를 역할과 연결합니다. 노드 테이블 생성은 컨트롤러 및 작업 방법에 해당할 수 있습니다. 역할 테이블에는 아래와 같이 역할 이름과 해당 노드 ID가 저장됩니다.

컨트롤러

actionpidindex01 11역할 테이블(think_role) : node_ids
1 index home index
2 add home index add
3 edit home index edit
4 delete home index delete
id name

12user (2 ) 권한 인증을 위해 컨트롤러의 Auth 클래스를 사용합니다. 구체적인 코드는 다음과 같습니다. class IndexController는 Controller를 확장합니다
public function __construct()
{
    parent::__construct();
    //实例化Auth类
    $auth = new ThinkAuth();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //进行权限认证
    if (!$auth->check($url, $uid)) {
        $this->error('您没有访问该页面的权限!');
    }
}
노드 기반 권한 인증
admin 1,2,3,4
1
{} 위 코드에서는 인스턴스화를 통해 현재 사용자의 역할 ID와 요청된 컨트롤러를 얻습니다. Auth 클래스와 메소드를 사용하고 권한 인증을 위해 $auth->check() 메소드를 사용합니다. 확인에 실패하면 오류 메시지가 출력됩니다.

노드 기반 권한 인증은 ThinkPHPLibraryThink에도 있는 프레임워크에서 제공하는 Access 클래스를 사용하여 구현할 수 있습니다. 구체적인 단계는 다음과 같습니다.


(1) 권한 인증을 위해 컨트롤러의 Access 클래스를 사용합니다. 구체적인 코드는 다음과 같습니다.

class IndexController는 Controller를 확장합니다

{

public function __construct()
{
    parent::__construct();
    //实例化Access类
    $access = new ThinkAccess();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //定义权限节点列表
    $nodes = array(
        'Index/index',//首页
        'Index/add',//添加页面
        'Index/edit',//编辑页面
        'Index/delete',//删除操作
    );

    //进行权限认证
    if (!$access->check($nodes, $uid, $url)) {
        $this->error('您没有访问该页面的权限!');
    }
}

}
  1. 위 코드에서 Access 클래스를 인스턴스화하여 현재 사용자의 역할 ID와 요청한 컨트롤러 및 메소드를 사용하고 $access->check() 메소드를 사용하여 권한 인증을 수행합니다. 권한 노드 목록의 각 항목은 노드, 즉 컨트롤러와 메서드에 해당합니다. 확인에 실패하면 오류 메시지가 출력됩니다.
3. 권한 인증 최적화

실제 애플리케이션에서는 코드 재사용성과 보안을 향상시키기 위해 권한 인증을 일부 최적화해야 합니다. 구체적인 최적화 포인트는 다음과 같습니다.

퍼블릭 컨트롤러 설정

프레임워크의 Common 모듈에서 퍼블릭 컨트롤러 BaseController를 생성하고 컨트롤러에 권한 확인 로직을 배치할 수 있습니다. 다른 컨트롤러가 이 컨트롤러를 상속한 후에는 코드의 이 부분을 재사용할 수 있습니다.

캐시 노드 정보

권한 인증 시 노드 테이블과 역할 테이블을 매번 쿼리해야 하므로 시스템 성능에 영향을 미칩니다. 따라서 쿼리 결과를 캐시하여 시스템 성능을 향상시킬 수 있습니다. 프레임워크에서 제공하는 캐시 클래스를 사용하여 쿼리 결과를 캐시할 수 있으며, 다음에 쿼리할 때 캐시된 결과를 직접 얻을 수 있습니다.

  1. 노드 정보 암호화

보안 강화를 위해 노드 정보가 직접 노출되지 않도록 노드 정보를 암호화할 수 있습니다. 프레임워크에서 제공하는 암호화 클래스를 사용하여 노드 ID를 암호화하고 암호화된 노드 정보를 역할 테이블에 저장할 수 있습니다.

    4. 요약
  1. 권한 인증은 웹사이트 개발에 없어서는 안 될 부분입니다. 사용자 데이터의 보안을 보장하고 사용자 관리를 향상시킬 수 있습니다. ThinkPHP 프레임워크에서는 Auth 클래스와 Access 클래스를 이용하여 매우 편리하게 권한 인증 기능을 구현할 수 있습니다. 이 글의 소개를 통해 ThinkPHP에서 권한 인증을 사용하는 단계와 최적화 방법을 이해할 수 있으며, 이는 개발 작업에 도움이 될 것이라고 믿습니다.

위 내용은 thinkphp에서 권한 인증을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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