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