thinkphp6是一款优秀的php框架,它为我们提供了很多高效的工具和功能。其中,auth授权是一个非常强大的功能,可以帮助我们在应用程序中进行权限管理。本文将介绍如何使用thinkphp6的auth授权。

安装Auth组件
首先,我们需要安装Auth组件。在终端中执行以下命令:composer require topthink/think-auth登录后复制安装完成后,我们需要在配置文件中添加Auth服务提供者:// config/app.php

return [
// ...
'providers' => [
// ...
thinkuthServiceProvider::class,
],
];登录后复制然后,我们需要执行以下命令生成Auth配置文件:php think auth:config登录后复制配置Auth组件Auth组件可以通过配置来实现不同的权限管理需求,下面是一个基础的配置:立即学习“PHP免费学习笔记(深入)”;// 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:是否开启权限认证,true开启,false关闭;auth_type:认证方式,1为实时认证(即每次验证权限时都重新获取权限),2为登录认证(即用户登录后验证权限);auth_group:用户组数据表名;auth_group_access:用户组明细关联表名;auth_rule:权限规则表;auth_user:用户信息表。创建权限规则在使用Auth授权之前,我们需要先创建一些权限规则。权限规则可以控制用户对不同资源的访问权限。我们需要在数据库中创建一个auth_rule表,然后通过添加记录的方式来创建权限规则。// appmodelAuthRule.php

namespace appmodel;

use thinkModel;

class AuthRule extends Model
{
//
}登录后复制接下来,我们需要在数据库中创建auth_rule表: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='权限规则表';登录后复制然后,我们可以通过以下方式添加一些权限规则: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();登录后复制创建用户组除了权限规则外,我们还需要创建用户组。用户组是一些用户的集合,拥有相同的访问权限。我们需要在数据库中创建一个auth_group表,然后通过添加记录的方式来创建用户组。// appmodelAuthGroup.php

namespace appmodel;

use thinkModel;

class AuthGroup extends Model
{
//
}登录后复制接下来,我们需要在数据库中创建auth_group表: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='用户组表';登录后复制然后,我们可以通过以下方式添加一些用户组:use appmodelAuthGroup;

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

$group = new AuthGroup;
$group->title = '普通用户';
$group->save();登录后复制创建用户组明细现在,我们已经创建了一些权限规则和用户组。接下来,我们需要将规则分配给用户组。我们需要在数据库中创建一个auth_group_access表,然后通过添加记录的方式来创建用户组明细。// appmodelAuthGroupAccess.php

namespace appmodel;

use thinkModel;

class AuthGroupAccess extends Model
{
//
}登录后复制接下来,我们需要在数据库中创建auth_group_access表: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='用户组明细表';登录后复制然后,我们可以通过以下方式将权限规则分配给用户组: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();登录后复制使用Auth授权现在,我们已经创建了一些权限规则和用户组,并将规则分配给了用户组。接下来,我们可以使用Auth授权来验证用户是否有访问权限。// 授权验证
use thinkacadeSession;
use thinkacadeRequest;
use thinkacadeConfig;
use thinkacadeDb;
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('无权限');
    }
}

}登录后复制首先,我们需要从Session中获取用户登录信息。如果用户未登录,则跳转到登录页面。
然后,我们获取当前用户的uid。如果当前用户是超级管理员,则直接通过权限验证。
否则,我们创建一个Auth实例,并获取当前请求的路由。然后,我们使用Auth的check方法验证当前用户是否有访问权限。如果没有,则抛出一个无权限的错误。
小结
在本文中,我们学习了如何使用ThinkPHP6的Auth授权。我们使用Auth组件来实现权限管理,并创建了一些权限规则和用户组。最后,我们使用Auth授权来验证用户是否有访问权限。如果您需要更高级的权限管理功能,可以通过扩展Auth组件来实现。以上就是如何使用ThinkPHP6的Auth授权的详细内容,更多请关注php中文网其它相关文章!