>  기사  >  PHP 프레임워크  >  ThinkPHP6에서 권한 제어 기술 사용

ThinkPHP6에서 권한 제어 기술 사용

WBOY
WBOY원래의
2023-06-21 16:51:072177검색

권한 제어 기술은 현대 웹 애플리케이션 개발에서 점점 더 중요해지고 있습니다. 이는 개발자가 사용자 권한을 관리하고, 데이터 액세스를 제어하고, 시스템 보안을 보호하는 데 도움이 됩니다. ThinkPHP6은 다양한 권한 제어 기술을 제공하는 강력한 PHP 프레임워크입니다. 이 기사에서는 그 중 일부를 소개합니다.

  1. 인증 및 승인

ThinkPHP6에서 인증과 승인은 서로 다른 개념입니다. 인증이란 일반적으로 사용자의 신원을 확인하고 사용자가 합법적인지 여부를 확인하는 것을 의미합니다. 권한 부여는 사용자에게 특정 리소스에 액세스할 수 있는 권한을 부여하는 것을 의미합니다. ThinkPHP6은 인증 및 권한 부여 기능을 구현하기 위한 Auth 구성 요소를 제공합니다.

인증 구성 요소는 구성 파일에서 사용자, 역할 및 권한 간의 관계를 정의하고 Auth 클래스의 메서드를 호출하여 인증 및 권한 부여를 수행해야 합니다. 구체적인 단계는 다음과 같습니다.

(1) 관계 정의

구성 파일에서 사용자, 역할 및 권한 간의 관계를 정의합니다. 예:

'auth' => [

'auth_on' => true, // 认证开关
'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。
'auth_group' => 'auth_group', // 用户组数据表名
'auth_group_access' => 'auth_group_access', // 用户-用户组关系表
'auth_rule' => 'auth_rule', // 权限规则表
'auth_user' => 'admin_user', // 用户信息表

],

위 코드에서는 'auth_on' 스위치를 true로 설정해 인증 기능을 활성화하고, 'auth_type' 스위치를 1로 설정해 실시간 인증을 사용하도록 했습니다. 다음으로 사용자 그룹, 사용자-사용자 그룹 관계, 권한 규칙, 사용자 정보 등 4개의 테이블 이름이 정의됩니다.

(2) 사용자 인증

사용자 인증을 위해 Auth 클래스의 check 메소드를 사용하세요. 예:

use think acadeAuth;

//인증된 사용자
if (Auth::check($username, $password)) {

// 认证通过

} else {

// 认证失败

}

위 코드에서 $username $password는 사용자가 각각 입력한 사용자 이름과 비밀번호입니다. Auth::check 메소드는 인증에 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

(3) 승인된 액세스

승인된 액세스에 앞서 현재 로그인된 사용자의 역할 및 권한이 세션에 저장되어 있어야 합니다. 예:

think acadeSession 사용;
think acadeRequest 사용;
think acadeAuth 사용;

// 현재 사용자 역할 및 권한 저장
$user = Auth::user();
$groups = Auth::getGroups( $user ['id']);
$rules = Auth::getRules($user['id']);
Session::set('user_groups', $groups);
Session::set('user_rules' , $ 규칙);

다음으로 컨트롤러에 있는 Auth 클래스의 check 메서드를 사용하여 사용자에게 액세스 권한이 있는지 확인합니다. 예:

think acadeSession 사용;
think acadeRequest 사용;
think acadeAuth 사용;

// 사용자 권한 결정
$user = Session::get('user');
$groups = Session::get(' user_groups ');
$rules = 세션::get('user_rules');
if (Auth::check(요청::path(), $groups, $rules)) {

// 用户有访问权限

} else {

// 用户无访问权限

}

위 코드에서 Request::path()는 현재 요청의 URL 주소를 가져옵니다. $groups 및 $rules는 각각 현재 사용자의 역할 및 권한입니다. Auth::check 메소드는 사용자에게 액세스 권한이 있는지 확인합니다. 그렇다면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

  1. RBAC

RBAC(Role-Based Access Control)는 사용자 역할과 권한을 분리하고, 사용자는 역할을 통해 권한을 얻는 역할 기반 접근 제어 기술입니다. ThinkPHP6은 역할 기반 액세스 제어를 쉽게 구현할 수 있는 RBAC 확장 모듈을 제공합니다.

(1) RBAC 확장 모듈 설치

ThinkPHP6에서 RBAC 확장 모듈을 설치하는 것은 매우 편리합니다. 명령줄에서 다음 명령만 실행하면 됩니다.

composer require jiaming/admin-rbac

( 2) 데이터베이스 테이블 생성

다음 명령을 실행하여 필요한 데이터베이스 테이블을 생성합니다:

php think migration:run --seed /vendor/jiaming/admin-rbac/database/migrations

(3) RBAC 사용

RBAC 확장 모듈을 사용하려면 역할, 권한, 리소스 및 규칙을 정의해야 합니다. ThinkPHP6에서는 RBAC 관련 구성 항목을 config/auth.php에 정의해야 합니다. 예:

'auth' => [

// ...
'auth_type' => 'rbac',
'rbac' => [
    'role_table' => 'admin_role',
    'user_table' => 'admin_user',
    'access_table' => 'admin_access',
    'node_table' => 'admin_node',
    'role_user_table' => 'admin_role_user',
],

],

위 코드에서 'auth_type'은 'rbac'로 설정됩니다. , RBAC 인증 방법 사용을 나타내며 관련 데이터 테이블 이름을 정의합니다.

다음으로 컨트롤러에서 RBAC를 초기화해야 합니다. 예:

use jiamingAdminRbacRbac;

class Index extends Controller
{

public function index()
{
    // 初始化RBAC
    Rbac::init();
    // ...
}

}

위 코드에서는 Rbac::init 메서드를 호출하여 초기화합니다. RBAC.

마지막으로 컨트롤러에서 액세스 제어를 수행합니다. 예:

use jiamingAdminRbacRbac;

class Index extends Controller
{

public function index()
{
    // 初始化RBAC
    Rbac::init();
    // 判断用户权限
    if (!Rbac::can('index/index/index')) {
        $this->error('您没有访问权限!');
    }
    // ...
}

}

위 코드에서 Rbac::can 메소드는 현재 사용자가 인덱스에 대한 액세스/인덱스/인덱스에 대한 권한입니다.

요약

권한 제어 기술은 시스템 보안과 사용자 데이터를 보호하기 위한 최신 웹 애플리케이션 개발에서 중요한 측면입니다. ThinkPHP6에서는 인증 및 권한 부여, RBAC 등 다양한 권한 제어 방법을 사용할 수 있습니다. 애플리케이션 요구 사항 및 개발 비용을 기반으로 적절한 권한 제어 방법을 선택하면 개발 효율성과 애플리케이션 보안을 향상할 수 있습니다.

위 내용은 ThinkPHP6에서 권한 제어 기술 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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