Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan kebenaran Pengesahan ThinkPHP6

Cara menggunakan kebenaran Pengesahan ThinkPHP6

PHPz
PHPzasal
2023-06-20 08:27:131440semak imbas

ThinkPHP6 ialah rangka kerja PHP yang sangat baik yang memberikan kami banyak alatan dan fungsi yang cekap. Antaranya, kebenaran Pengesahan ialah fungsi yang sangat berkuasa yang boleh membantu kami mengurus kebenaran dalam aplikasi. Artikel ini akan memperkenalkan cara menggunakan kebenaran Pengesahan ThinkPHP6.

  1. Pasang komponen Auth

Mula-mula, kita perlu memasang komponen Auth. Jalankan arahan berikut dalam terminal:

composer require topthink/think-auth

Selepas pemasangan selesai, kita perlu menambah pembekal perkhidmatan Auth dalam fail konfigurasi:

// config/app.php

return [
    // ...
    'providers' => [
        // ...
        thinkuthServiceProvider::class,
    ],
];

Kemudian, kita perlu melaksanakan arahan berikut untuk menjana fail konfigurasi Auth:

php think auth:config
  1. Configure Auth component

Auth component boleh dikonfigurasikan untuk mencapai keperluan pengurusan kebenaran yang berbeza Berikut ialah konfigurasi asas:

// config/auth.php

return [
    'auth_on' => true,
    'auth_type' => 1,
    'auth_group' => 'auth_group',
    'auth_group_access' => 'auth_group_access',
    'auth_rule' => 'auth_rule',
    'auth_user' => 'user',
];
  • auth_on: sama ada untuk menghidupkan pengesahan kebenaran, benar untuk menghidupkan, palsu untuk mematikan
  • auth_type: kaedah pengesahan, 1 ialah pengesahan masa nyata (iaitu pihak berkuasa; diperoleh semula setiap kali kuasa disahkan), 2 ialah pengesahan log masuk (iaitu, log masuk pengguna Sahkan kebenaran kemudian); nama jadual yang berkaitan;
  • auth_rule: jadual peraturan kebenaran;
  • Buat peraturan kebenaran
  • Sebelum menggunakan kebenaran Pengesahan, kita perlu membuat beberapa peraturan kebenaran terlebih dahulu. Peraturan kebenaran boleh mengawal akses pengguna kepada sumber yang berbeza. Kita perlu mencipta jadual auth_rule dalam pangkalan data, dan kemudian mencipta peraturan kebenaran dengan menambah rekod.
// appmodelAuthRule.php

namespace appmodel;

use thinkModel;

class AuthRule extends Model
{
    //
}
    Seterusnya, kita perlu mencipta jadual auth_rule dalam pangkalan data:
  1. CREATE TABLE `auth_rule` (
        `id` INT NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(100) NOT NULL COMMENT '规则',
        `title` VARCHAR(100) NOT NULL COMMENT '规则名称',
        `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则类型',
        `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',
        `condition` TEXT COMMENT '规则表达式',
        PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限规则表';
  2. Kemudian, kita boleh menambah beberapa peraturan kebenaran dengan:
use appmodelAuthRule;

$rule = new AuthRule;
$rule->name = 'admin/user/index';
$rule->title = '管理用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/add';
$rule->title = '添加用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/edit';
$rule->title = '编辑用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/del';
$rule->title = '删除用户';
$rule->save();

Cipta Kumpulan pengguna

Selain peraturan kebenaran, kami juga perlu membuat kumpulan pengguna. Kumpulan pengguna ialah koleksi pengguna yang mempunyai hak akses yang sama. Kita perlu mencipta jadual auth_group dalam pangkalan data, dan kemudian mencipta kumpulan pengguna dengan menambah rekod.

// appmodelAuthGroup.php

namespace appmodel;

use thinkModel;

class AuthGroup extends Model
{
    //
}
    Seterusnya, kita perlu mencipta jadual auth_group dalam pangkalan data:
  1. CREATE TABLE `auth_group` (
        `id` INT NOT NULL AUTO_INCREMENT,
        `title` VARCHAR(100) NOT NULL COMMENT '组名',
        `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',
        PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户组表';
  2. Kemudian, kita boleh menambah beberapa kumpulan pengguna dengan:
use appmodelAuthGroup;

$group = new AuthGroup;
$group->title = '管理员';
$group->save();

$group = new AuthGroup;
$group->title = '普通用户';
$group->save();

Buat Kumpulan Pengguna Butiran

Kini, kami telah mencipta beberapa peraturan kebenaran dan kumpulan pengguna. Seterusnya, kita perlu menetapkan peraturan kepada kumpulan pengguna. Kita perlu mencipta jadual auth_group_access dalam pangkalan data, dan kemudian mencipta butiran kumpulan pengguna dengan menambah rekod.

// appmodelAuthGroupAccess.php

namespace appmodel;

use thinkModel;

class AuthGroupAccess extends Model
{
    //
}
    Seterusnya, kita perlu mencipta jadual auth_group_access dalam pangkalan data:
  1. CREATE TABLE `auth_group_access` (
        `uid` INT NOT NULL COMMENT '用户id',
        `group_id` INT NOT NULL COMMENT '用户组id',
        UNIQUE KEY `uid_group_id` (`uid`, `group_id`),
        KEY `uid` (`uid`),
        KEY `group_id` (`group_id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户组明细表';
  2. Kami kemudiannya boleh menetapkan peraturan kebenaran kepada kumpulan pengguna melalui:
use appmodelAuthGroupAccess;

$access = new AuthGroupAccess;
$access->uid = 1;
$access->group_id = 1;
$access->save();

$access = new AuthGroupAccess;
$access->uid = 2;
$access->group_id = 2;
$access->save();

$access = new AuthGroupAccess;
$access->uid = 3;
$access->group_id = 2;
$access->save();

Keizinan menggunakan Auth

Sekarang, kami telah mencipta beberapa peraturan kebenaran dan kumpulan pengguna dan memberikan peraturan kepada kumpulan pengguna. Seterusnya, kami boleh menggunakan kebenaran Pengesahan untuk mengesahkan sama ada pengguna mempunyai hak akses.

// 授权验证
use thinkacadeSession;
use thinkacadeRequest;
use thinkacadeConfig;
use thinkacadeDb;
use thinkuthAuth;

class BaseController extends Controller
{
    protected function initialize()
    {
        parent::initialize();

        // 如果用户未登录,则跳转到登录页面
        if (!Session::has('user')) {
            $this->redirect('/login');
        }

        $uid = Session::get('user.id');

        // 如果是超级管理员,则直接通过权限验证
        if ($uid == Config::get('admin_id')) {
            return true;
        }

        $auth = new Auth;
        $route = strtolower(Request::controller() . '/' . Request::action());
        if (!$auth->check($route, $uid)) {
            $this->error('无权限');
        }
    }
}
    Pertama, kita perlu mendapatkan maklumat log masuk pengguna daripada Sesi. Jika pengguna tidak log masuk, lompat ke halaman log masuk.
  1. Kemudian, kami mendapat uid pengguna semasa. Jika pengguna semasa ialah pentadbir super, pengesahan kebenaran akan dihantar terus.

Jika tidak, kami mencipta tika Auth dan mendapatkan laluan untuk permintaan semasa. Kemudian, kami menggunakan kaedah semakan Auth untuk mengesahkan sama ada pengguna semasa mempunyai hak akses. Jika tidak, ralat tiada kebenaran dilemparkan.

Ringkasan

Dalam artikel ini, kami mempelajari cara menggunakan kebenaran ThinkPHP6's Auth. Kami menggunakan komponen Auth untuk melaksanakan pengurusan kebenaran dan mencipta beberapa peraturan kebenaran dan kumpulan pengguna. Akhir sekali, kami menggunakan kebenaran Pengesahan untuk mengesahkan bahawa pengguna mempunyai hak akses. Jika anda memerlukan fungsi pengurusan kebenaran yang lebih maju, anda boleh mencapainya dengan melanjutkan komponen Auth.

Atas ialah kandungan terperinci Cara menggunakan kebenaran Pengesahan ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn