日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

隨著業(yè)務的不斷發(fā)展,很多中小型公司都擁有了自己的用戶維護系統(tǒng),用戶權(quán)限管理是其中重要的一環(huán)。為了保護系統(tǒng)中的敏感信息、保障業(yè)務的正常運行,我們需要使用角色權(quán)限管理機制,保證不同角色的用戶只能訪問指定的資源和數(shù)據(jù)。

本文將以ThinkPHP6框架為例,介紹如何使用其提供的權(quán)限控制中間件和擴展擴展包實現(xiàn)用戶角色權(quán)限管理。

    創(chuàng)建角色表和權(quán)限表

首先我們需要定義兩個數(shù)據(jù)庫表,一個是角色表,用來存儲系統(tǒng)角色信息;另一個是權(quán)限表,用來存儲系統(tǒng)權(quán)限信息。

CREATE TABLE role (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
name varchar(20) NOT NULL COMMENT ‘角色名稱’,
description varchar(50) NOT NULL COMMENT ‘角色描述’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’角色表’;

CREATE TABLE permission (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
name varchar(20) NOT NULL COMMENT ‘權(quán)限名稱’,
description varchar(50) NOT NULL COMMENT ‘權(quán)限描述’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’權(quán)限表’;

我們可以使用ThinkPHP提供的數(shù)據(jù)庫遷移工具來創(chuàng)建表:php think migrate:run。

    創(chuàng)建角色和權(quán)限模型

接下來,我們需要創(chuàng)建角色和權(quán)限的模型。在app/model目錄下創(chuàng)建Role.php和Permission.php文件,代碼如下:

<?php
namespace appmodel;

use thinkModel;

class Role extends Model
{

protected $table = 'role';

登錄后復制

}

<?php
namespace appmodel;

use thinkModel;

class Permission extends Model
{

protected $table = 'permission';

登錄后復制

}

    創(chuàng)建角色和權(quán)限關聯(lián)表

由于一個用戶可能擁有多個角色,一個角色也可能對應多個權(quán)限,所以我們需要創(chuàng)建一個角色和權(quán)限的關聯(lián)表。在數(shù)據(jù)庫中創(chuàng)建一個role_permission表。

CREATE TABLE role_permission (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
role_id int(11) NOT NULL COMMENT ‘角色ID’,
permission_id int(11) NOT NULL COMMENT ‘權(quán)限ID’,
PRIMARY KEY (id),
KEY role_id (role_id),
KEY permission_id (permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’角色-權(quán)限關聯(lián)表’;

在模型中定義角色和權(quán)限的多對多關系:

<?php
namespace appmodel;

use thinkModel;

class Role extends Model
{

protected $table = 'role';

public function permissions()
{
    return $this->belongsToMany(
        Permission::class,
        'role_permission',
        'role_id',
        'permission_id'
    );
}

登錄后復制

}

<?php
namespace appmodel;

use thinkModel;

class Permission extends Model
{

protected $table = 'permission';

public function roles()
{
    return $this->belongsToMany(
        Role::class,
        'role_permission',
        'permission_id',
        'role_id'
    );
}

登錄后復制

}

    定義中間件

在ThinkPHP6中,中間件是處理請求的強大工具,我們可以通過中間件來實現(xiàn)權(quán)限控制。創(chuàng)建一個CheckAuth中間件,用于判斷用戶是否有權(quán)限進行當前的操作。在appmiddleware目錄下創(chuàng)建CheckAuth.php文件,代碼如下:

<?php
namespace appmiddleware;

use thinkacadeDb;
use thinkacadeSession;
use thinkacadeConfig;

class CheckAuth
{

public function handle($request, Closure $next)
{
    if (Session::has('user')) {
        $roles = Db::table('user')
            ->alias('u')
            ->leftJoin('role_user ru', 'u.id = ru.user_id')
            ->leftJoin('role r', 'ru.role_id = r.id')
            ->where('u.id', '=', Session::get('user')->id)
            ->field('r.id')
            ->select();
        $permissions = Config::get('permissions');
        foreach ($roles as $role) {
            $rolePermissions = Db::table('role_permission')
                ->where('role_id', '=', $role->id)
                ->field('permission_id')
                ->select();
            foreach ($rolePermissions as $rolePermission) {
                if (in_array($rolePermission->permission_id, $permissions)) {
                    return $next($request);
                }
            }
        }
    }
    abort(403, '沒有權(quán)限');
}

登錄后復制

}

該中間件會先查詢當前用戶所擁有的所有角色,在遍歷角色時,查詢每個角色所擁有的權(quán)限,如果有符合當前請求的權(quán)限,就允許繼續(xù)執(zhí)行,否則返回403錯誤。

    創(chuàng)建權(quán)限配置文件

為了方便管理系統(tǒng)的權(quán)限,我們可以使用ThinkPHP提供的Config功能,將所有的權(quán)限寫入配置文件中。在config目錄下創(chuàng)建一個permissions.php文件,代碼如下:

<?php
return [

1 => 'user.create',
2 => 'user.read',
3 => 'user.update',
4 => 'user.delete',

登錄后復制

];

我們可以通過key/value的形式來記錄系統(tǒng)所有的權(quán)限,key為一個整數(shù),value為一個字符串,表示權(quán)限的名稱。

    應用中間件

最后,我們需要實際應用上述的中間件。打開config目錄下的middleware.php文件,添加CheckAuth中間件。

<?php
return [

// ...
'check_auth' => appmiddlewareCheckAuth::class,

登錄后復制

];

中間件的應用順序是按照數(shù)組的鍵名從前到后依次執(zhí)行的,我們可以通過數(shù)組下標來調(diào)整中間件的執(zhí)行順序。

在需要進行權(quán)限控制的控制器或方法上,可以使用middleware方法來綁定CheckAuth中間件。

<?php
namespace appcontroller;

use thinkacadeView;

class UserController
{

public function create()
{
    $this->middleware('check_auth');
    // ...
}

登錄后復制

}

至此,我們已經(jīng)完成了使用ThinkPHP6實現(xiàn)用戶角色權(quán)限管理的所有步驟,您可以根據(jù)實際業(yè)務需求來擴展和完善上述示例代碼。

以上就是如何使用ThinkPHP6實現(xiàn)用戶角色權(quán)限管理的詳細內(nèi)容,更多請關注www.xfxf.net其它相關文章!

分享到:
標簽:thinkphp 權(quán)限管理 用戶角色
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定