>  기사  >  PHP 프레임워크  >  ThinkPHP6에서 인증 인증 기술 사용

ThinkPHP6에서 인증 인증 기술 사용

WBOY
WBOY원래의
2023-06-20 17:50:312100검색

인터넷 애플리케이션의 지속적인 개발과 함께 웹 애플리케이션의 보안은 점점 더 중요한 문제가 되었습니다. 프로그램의 보안을 보장하는 방법은 모든 개발자가 직면한 문제가 되었습니다. 인증 권한 부여 기술은 역할 기반 액세스 제어를 제공하는 널리 사용되는 솔루션입니다.

이 기사에서는 ThinkPHP6에서 인증 인증 기술을 사용하는 방법을 살펴보겠습니다. 먼저 인증 승인의 작동 원리와 핵심 개념을 명확히 해야 합니다.

  1. 인증 권한 작동 방식

인증 권한의 핵심은 역할 기반 액세스 제어이며, 이는 주로 다음 세 단계로 구분됩니다.

1.1 역할 만들기

인증 권한을 사용하기 전에 먼저 역할 기반 액세스 제어를 생성해야 합니다. 역할. 역할은 사용자가 갖는 액세스 권한을 정의하는 권한 집합입니다.

1.2 역할에 권한 할당

역할을 생성한 후 역할에 해당 권한을 할당해야 합니다. 권한은 기능 모듈이나 데이터에 접근할 수 있는 권한을 의미합니다.

1.3 사용자에게 역할 할당

마지막으로 사용자에게 역할을 할당해야 합니다. 사용자에게는 사용자의 액세스 권한을 결정하는 여러 역할이 할당될 수 있습니다.

인증 승인 워크플로에서 액세스 컨트롤러를 사용하여 액세스 제어를 구현하세요. 액세스 컨트롤러는 사용자에게 현재 URL에 대한 액세스 권한이 있는지 확인하는 데 사용됩니다. 사용자에게 액세스 권한이 있으면 해당 콘텐츠에 계속 액세스할 수 있습니다.

  1. ThinkPHP6에서 인증 인증 기술 사용

이제 인증 인증이 어떻게 작동하는지 이해했으므로 아래에서는 ThinkPHP6에서 인증 인증 기술을 사용하는 방법을 자세히 설명하겠습니다. 백그라운드에 관리자와 일반 사용자라는 두 가지 유형의 사용자가 있다고 가정합니다. 관리자는 모든 콘텐츠 모듈에 접근할 수 있지만 일반 사용자는 일부 콘텐츠에만 접근할 수 있습니다.

2.1 인증 플러그인 설치 및 구성

인증 기술을 사용하기 전에 먼저 인증 플러그인을 설치하고 구성해야 합니다. ThinkPHP6에서는 Auth 플러그인이 프레임워크에 통합되어 간단한 구성으로 사용할 수 있습니다.

먼저 config 디렉터리에 auth.php 구성 파일을 생성합니다. 구성 정보는 다음과 같습니다.

return [
    // 用户认证的类名,不设置则使用核心集成认证方法
    'auth'     => AppAuth::class,
    // 不需要认证的路由,可允许所有用户访问的路由
    'no_auth'  => ['index/index'],
    // 需要认证且验证失败时跳转的地址
    'fail_url' => 'index/login',
];

2.2 Create User 모델

Create User 모델, 관련 코드는 다음과 같습니다.

<?php
namespace appmodel;

use thinkModel;

class User extends Model {

    // 定义角色关联
    public function roles() {
        return $this->belongsToMany(Role::class, 'user_role');
    }

    // 判断用户是否有权限访问当前操作
    public function hasPermission($permission) {
        foreach ($this->roles as $role) {
            if ($role->checkPermission($permission)) {
                return true;
            }
        }

        return false;
    }
}

2.3 Create Role 모델

역할 모델 생성, 관련 코드는 다음과 같습니다.

<?php
namespace appmodel;

use thinkModel;

class Role extends Model {

    // 定义权限关联
    public function permissions() {
        return $this->belongsToMany(Permission::class, 'role_permission');
    }

    // 检查角色是否有权限访问当前操作
    public function checkPermission($permission) {
        foreach ($this->permissions as $item) {
            if ($item->name == $permission) {
                return true;
            }
        }

        return false;
    }
}

2.4 권한 모델 생성

권한 모델 생성, 관련 코드는 다음과 같습니다.

<?php
namespace appmodel;

use thinkModel;

class Permission extends Model {
}

2.5 데이터베이스 테이블 생성

사용자 테이블을 포함한 데이터베이스 테이블 생성, 역할 테이블, 권한 테이블, 두 개의 관계형 테이블 user_role 및 role_permission .

사용자 테이블 관련 구조:

Field Type Comment
id int
username varchar(20)
password varchar(255)
created_at datetime
updated_at datetime

역할 테이블 관련 구조:

Field Type Comment
id int
name varchar(20)
created_at datetime
updated_at datetime

허가 테이블 관련 구조:

Field Type Comment
id int
name varchar(20)

user_role 테이블 관련 구조 :

Field Type Comment
id int
user_id int
role_id int

Role_permission 테이블 관련 구조:

Field Type Comment
id int
role_id int
permission_id int

2.6 컨트롤러 코드 구현

다음은 샘플 컨트롤러를 사용하여 인증 인증을 구현하는 방법을 보여줍니다. 샘플 컨트롤러 코드는 다음과 같습니다.

<?php
namespace appdmincontroller;

use appmodelUser;
use thinkController;

class Index extends Controller {

    // 后台首页
    public function index() {
        // 获取当前登录用户
        $user_id = session('user_id');
        $user = User::find($user_id);

        // 判断用户是否有权限访问当前操作
        if (!$user->hasPermission($this->request->path())) {
            $this->error('无权访问');
        }

        return view();
    }

    // 登录页面
    public function login() {
        return view();
    }

    // 处理登录请求
    public function do_login() {
        $username = $this->request->param('username');
        $password = $this->request->param('password');

        // 根据用户名查询用户
        $user = User::where('username', $username)->find();

        // 验证用户密码
        if ($user && password_verify($password, $user->password)) {
            // 记录登录状态
            session('user_id', $user->id);

            // 跳转到后台首页
            $this->redirect('index/index');
        } else {
            $this->error('登录失败');
        }
    }

    // 退出登录
    public function logout() {
        session('user_id', null);
        $this->redirect('index/login');
    }
}
  1. Summary

이 글에서는 ThinkPHP6에서 인증 인증의 작동 원리, 핵심 개념 및 애플리케이션 구현을 소개했습니다. 인증 인증 기술을 사용하면 웹 애플리케이션의 보안을 효과적으로 향상시키고 사용자에게 보다 안전하고 안정적인 서비스를 제공할 수 있습니다. 후속 웹 애플리케이션 개발 과정에서도 보안 보장에 주의를 기울여야 하며 기존 보안 기술을 최대한 활용해야 합니다.

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

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