ホームページ >バックエンド開発 >PHPチュートリアル >PHP と MySQL を使用して強力なユーザー権限管理システムを実装する
最新の Web アプリケーションでは、ユーザー権限の制御が非常に重要です。アプリケーションのセキュリティと整合性を確保するには、特定の操作および情報へのユーザー アクセスを制限し、ユーザーが実行を許可される特定のタスクを定義する必要があります。この記事では、PHP と MySQL を使用して、Web アプリケーションのセキュリティと整合性を確保する強力なユーザー権限制御システムを作成する方法を紹介します。
1. データベーステーブルの設計
MySQL データベースでは、ユーザー権限制御システムを実装するために少なくとも 2 つのテーブルが必要です。最初のテーブルには、ユーザー名、パスワード、電子メール アドレスなど、すべてのユーザーの基本情報が記録されます。 2 番目のテーブルは権限テーブルで、各役割/ユーザー グループの権限が記録されます。したがって、データベースに次の 2 つのテーブルを作成する必要があります:
CREATE TABLE users
(
id
int(11) NOT NULL AUTO_INCREMENT,
username
varchar(50) NOT NULL,
password
varchar(255) NOT NULL,
email
varchar(100) NOT NULL,
PRIMARY KEY (id
)
);
CREATE TABLE roles
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(50) NOT NULL,
PRIMARY KEY (id
)
);
ユーザーとロールを関連付けるテーブルも必要です。このテーブルは、ユーザー ID をロール ID にマップします。このテーブルを作成しましょう。
CREATE TABLE role_user
(
role_id
int(11) NOT NULL,
user_id
int(11) NOT NULL,
主キー (role_id
,user_id
),
制約 FK_role_user_role_id
外部キー(role_id
) 参照 roles
(id
),
制約 FK_role_id_user_id
外部キー (user_id
) 参照users
(id
)
);
2. ユーザー権限管理システムの実装
これで、必要なデータベースが作成されました。アプリケーションのユーザー権限制御システムの実装を開始できます。基本的な概念をいくつか示します。
ロールは、一連の権限を関連付ける論理構造です。たとえば、「管理者」ロールを作成し、このロールにすべての管理関連のアクセス許可を付与できます。
権限は、特定の機能の制御権限です。たとえば、ユーザーの表示、作成、編集、削除は異なる権限です。これらの権限を特定のロールに付与すると、ユーザーのアクセスが制限されます。
ユーザーは、アプリケーションと対話する個人です。各ユーザーには 1 つ以上の役割が割り当てられ、ユーザーが実行およびアクセスできるアクションが定義されます。
次に、このシステムを実装する方法を見てみましょう。
新しいユーザーごとに、対応するユーザー レコードを作成する必要があります。ユーザー名、パスワード、電子メール アドレスなどのレコードをユーザーごとに「ユーザー」テーブルに作成します。次のコードを使用してユーザーを作成します。
function create_user($username, $password, $email) { // Encrypt password $encrypted_password = password_hash($password, PASSWORD_DEFAULT); // Prepare SQL statement $sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("sss", $username, $encrypted_password, $email); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }
ロールの作成は非常に簡単で、「ロール」テーブルにレコードを挿入するだけです。ここに例を示します。
function create_role($name) { // Prepare SQL statement $sql = "INSERT INTO roles (name) VALUES (?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("s", $name); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }
ユーザーとロールを作成したので、それらを関連付ける必要があります。ロール ID とユーザー ID を「role_user」テーブルに挿入することで、ロールを割り当てることができます。以下にサンプルコードを示します。
function assign_role_to_user($role_id, $user_id) { // Prepare SQL statement $sql = "INSERT INTO role_user (role_id, user_id) VALUES (?, ?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("ii", $role_id, $user_id); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }
最後に、ユーザーに操作を実行する権限があるかどうかを確認する必要があります。ユーザーが属しているすべてのロールを検索し、そのロールに必要な権限があるかどうかを確認します。ユーザーが権限を持っている場合は true を返し、権限を持っていない場合は false を返します。以下にサンプルコードを示します。
function has_permission($user_id, $permission) { // Fetch user roles $sql = "SELECT role_id FROM role_user WHERE user_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); // Check if any role has permission while ($row = $result->fetch_assoc()) { $sql2 = "SELECT permissions FROM roles WHERE id = " . $row['role_id']; $result2 = $conn->query($sql2); if ($result2->num_rows == 1) { $row2 = $result2->fetch_assoc(); $permissions = json_decode($row2['permissions'], true); if (in_array($permission, $permissions)) { return true; } } } // Permission not found return false; }
3. 概要
PHP と MySQL を使用してユーザー権限制御システムを作成すると、Web アプリケーションのセキュリティと整合性を確保できます。役割と権限に基づいて、特定の操作と情報へのユーザー アクセスを制限できます。このシステムを使用すると、Web アプリケーションを不正アクセスから保護できるため、全体的なセキュリティが向上します。
以上がPHP と MySQL を使用して強力なユーザー権限管理システムを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。