搜尋
首頁後端開發PHP7如何在PHP7.0實現分級權限控制?

如何在PHP7.0實現分級權限控制?

May 26, 2023 am 10:51 AM
php控制分級權限

在開發網頁應用程式時,通常需要根據使用者的角色和權限來限制他們在系統中的存取。分級權限控制是一種常見的權限管理方式,它基於角色和權限,將使用者分為不同的群組,每組能夠存取的內容不同。在PHP7.0中,可以使用Session和MySQL等技術來實現分級權限控制。

一、設計資料庫

在資料庫中,通常需要建立三個表:使用者表、角色表和權限表。以下是三個表的結構設計:

(1)使用者表

CREATE TABLE users (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(100),
`role_id` INT(11) NOT NULL,
PRIMARY KEY (`id`)

);

(2)角色表

CREATE TABLE roles (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)

);

(3)權限表

CREATE TABLE permissions (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`slug` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)

);

在這裡,我們使用了三個表,其中使用者表和角色表使用了外鍵來保證資料的一致性。

二、實作權限控制

(1)登入

登入時,需要驗證使用者的使用者名稱和密碼,並將使用者資訊儲存在Session中。下面是一段PHP程式碼:

session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST') {

$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    $_SESSION['user_id'] = $row['id'];
    $_SESSION['user_role_id'] = $row['role_id'];
    header("Location: dashboard.php");
    exit;
} else {
    $error = "Invalid email or password";
}

}

在登入成功後,將使用者的ID和角色ID儲存在Session中,以便在後續的存取中進行判斷。

(2)權限檢查

在需要進行權限檢查的頁面中,需要先判斷使用者是否已經登錄,並取得使用者的角色ID。然後,從資料庫中讀取該角色所具有的權限,進行判斷。以下是一段PHP程式碼,用來檢查使用者是否具有存取權限:

session_start();

if(!isset($_SESSION['user_id'])) {

header("Location: login.php");
exit;

}

$role_id = $_SESSION['user_role_id'];
$is_allowed = false;

$sqlsions.id =
(SELECT 選項。 ();

while($row = mysqli_fetch_assoc($result)) {

$permissions[] = $row['slug'];

}

if(in_array('view_dashboard', $permissions)) {

$is_allowed = true;

}

if(!$is_allowed) {

header("Location: unauthorized.php");
exit;

}

在這裡,我們使用了子查詢來取得該角色所具有的權限ID,然後使用IN關鍵字和陣列判斷該角色是否具有存取權限。

(3)控制存取

透過上述的權限檢查,我們已經可以確定使用者是否具有存取權限,如果沒有權限,則需要阻止使用者的存取。以下是一種實作方式:

(1)在需要控制存取的頁面中,將上述的權限檢查程式碼放在最上面,如果使用者沒有存取權限,則直接跳到未授權頁面。

(2)如果使用者有存取權限,則繼續執行頁面的程式碼。

(3)在每個需要存取的連結和按鈕中,需要將該連結或按鈕的權限slug作為參數傳遞,例如:

>Add News

在這裡,如果用戶沒有add_news的權限,則該連結將被隱藏。 三、總結

分級權限控制是一種常見的權限管理方式,可以根據使用者的角色和權限來限制他們在系統中的存取。在PHP7.0中,可以使用Session和MySQL等技術來實現分級權限控制。透過上述實現方式,我們可以在Web應用程式中實現分級權限控制,確保了系統的安全性和穩定性。

以上是如何在PHP7.0實現分級權限控制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器