宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動態(tài)
精選推薦

ThinkPHP6進階教程:如何優(yōu)雅地使用Auth模塊進行權限驗證

管理 管理 編輯 刪除

thinkphp6是一款優(yōu)秀的php框架,它為我們提供了很多高效的工具和功能。其中,auth授權是一個非常強大的功能,可以幫助我們在應用程序中進行權限管理。本文將介紹如何使用thinkphp6的auth授權。

安裝Auth組件

首先,我們需要安裝Auth組件。在終端中執(zhí)行以下命令:

composer require topthink/think-auth

安裝完成后,我們需要在配置文件中添加Auth服務提供者:

// config/app.php

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

然后,我們需要執(zhí)行以下命令生成Auth配置文件:

php think auth:config

配置Auth組件

Auth組件可以通過配置來實現(xiàn)不同的權限管理需求,下面是一個基礎的配置:

// 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:用戶組數(shù)據(jù)表名;
  • auth_group_access:用戶組明細關聯(lián)表名;
  • auth_rule:權限規(guī)則表;
  • auth_user:用戶信息表。

創(chuàng)建權限規(guī)則

在使用Auth授權之前,我們需要先創(chuàng)建一些權限規(guī)則。權限規(guī)則可以控制用戶對不同資源的訪問權限。我們需要在數(shù)據(jù)庫中創(chuàng)建一個auth_rule表,然后通過添加記錄的方式來創(chuàng)建權限規(guī)則。

// appmodelAuthRule.php

namespace appmodel;

use thinkModel;

class AuthRule extends Model
{
    //
}

接下來,我們需要在數(shù)據(jù)庫中創(chuàng)建auth_rule表:

CREATE TABLE `auth_rule` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL COMMENT '規(guī)則',
    `title` VARCHAR(100) NOT NULL COMMENT '規(guī)則名稱',
    `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '規(guī)則類型',
    `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '狀態(tài)',
    `condition` TEXT COMMENT '規(guī)則表達式',
    PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='權限規(guī)則表';

然后,我們可以通過以下方式添加一些權限規(guī)則:

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();

創(chuàng)建用戶組

除了權限規(guī)則外,我們還需要創(chuàng)建用戶組。用戶組是一些用戶的集合,擁有相同的訪問權限。我們需要在數(shù)據(jù)庫中創(chuàng)建一個auth_group表,然后通過添加記錄的方式來創(chuàng)建用戶組。

// appmodelAuthGroup.php

namespace appmodel;

use thinkModel;

class AuthGroup extends Model
{
    //
}

接下來,我們需要在數(shù)據(jù)庫中創(chuàng)建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 '狀態(tài)',
    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();

創(chuàng)建用戶組明細

現(xiàn)在,我們已經(jīng)創(chuàng)建了一些權限規(guī)則和用戶組。接下來,我們需要將規(guī)則分配給用戶組。我們需要在數(shù)據(jù)庫中創(chuàng)建一個auth_group_access表,然后通過添加記錄的方式來創(chuàng)建用戶組明細。

// appmodelAuthGroupAccess.php

namespace appmodel;

use thinkModel;

class AuthGroupAccess extends Model
{
    //
}

接下來,我們需要在數(shù)據(jù)庫中創(chuàng)建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='用戶組明細表';

然后,我們可以通過以下方式將權限規(guī)則分配給用戶組:

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授權

現(xiàn)在,我們已經(jīng)創(chuàng)建了一些權限規(guī)則和用戶組,并將規(guī)則分配給了用戶組。接下來,我們可以使用Auth授權來驗證用戶是否有訪問權限。

// 授權驗證
use thinkacadeSession;
use thinkacadeRequest;
use thinkacadeConfig;
use thinkacadeDb;
use thinkuthAuth;

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

        // 如果用戶未登錄,則跳轉(zhuǎn)到登錄頁面
        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中獲取用戶登錄信息。如果用戶未登錄,則跳轉(zhuǎn)到登錄頁面。

然后,我們獲取當前用戶的uid。如果當前用戶是超級管理員,則直接通過權限驗證。

否則,我們創(chuàng)建一個Auth實例,并獲取當前請求的路由。然后,我們使用Auth的check方法驗證當前用戶是否有訪問權限。如果沒有,則拋出一個無權限的錯誤。

小結(jié)

在本文中,我們學習了如何使用ThinkPHP6的Auth授權。我們使用Auth組件來實現(xiàn)權限管理,并創(chuàng)建了一些權限規(guī)則和用戶組。最后,我們使用Auth授權來驗證用戶是否有訪問權限。如果您需要更高級的權限管理功能,可以通過擴展Auth組件來實現(xiàn)。

請登錄后查看

CRMEB-慕白寒窗雪 最后編輯于2024-02-02 17:17:00

快捷回復
回復
回復
回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
排序 默認正序 回復倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復' : '回復'}}
刪除
回復
回復

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復' : '回復'}}
刪除
回復
回復
查看更多
打賞
已打賞¥{{reward_price}}
2853
{{like_count}}
{{collect_count}}
添加回復 ({{post_count}})

相關推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動態(tài) 精選推薦 首頁頭條 首頁動態(tài) 首頁推薦
取 消 確 定
回復
回復
問題:
問題自動獲取的帖子內(nèi)容,不準確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認打賞

微信登錄/注冊

切換手機號登錄

{{ bind_phone ? '綁定手機' : '手機登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服