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

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

PHPz
PHPz原創
2023-05-26 10:51:061259瀏覽

在開發網頁應用程式時,通常需要根據使用者的角色和權限來限制他們在系統中的存取。分級權限控制是一種常見的權限管理方式,它基於角色和權限,將使用者分為不同的群組,每組能夠存取的內容不同。在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