최신 웹 애플리케이션에서는 사용자 권한 제어가 중요합니다. 애플리케이션의 보안과 무결성을 보장하려면 특정 작업 및 정보에 대한 사용자 액세스를 제한하고 사용자가 수행할 수 있는 특정 작업을 정의해야 합니다. 이 기사에서는 PHP와 MySQL을 사용하여 웹 애플리케이션의 보안과 무결성을 보장하는 강력한 사용자 권한 제어 시스템을 만드는 방법을 소개합니다.
1. 데이터베이스 테이블 설계
MySQL 데이터베이스에서는 사용자 권한 제어 시스템을 구현하기 위해 최소 두 개의 테이블이 필요합니다. 첫 번째 테이블에는 사용자 이름, 비밀번호, 이메일 주소를 포함한 모든 사용자의 기본 정보가 기록됩니다. 두 번째 테이블은 각 역할/사용자 그룹의 권한을 기록하는 권한 테이블입니다. 따라서 데이터베이스에 다음 두 테이블을 생성해야 합니다:
CREATE TABLE users
(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,
PRIMARY KEY (role_id
,user_id
),
CONSTRAINT FK_role_user_role_id
FOREIGN KEY (role_id
) REFERENCES roles
(id
),
CONSTRAINT FK_role_id_user_id
FOREIGN KEY (user_id
) REFERENCES users
(id
id
int(11) NOT NULL AUTO_INCREMENT,
사용자 이름
varchar(50) NOT NULL,
password
varchar(255) NOT NULL, email
varchar(100) NOT NULL,
id
));
CREATE TABLE roles
(
id
int(11) NOT NULL AUTO_INCREMENT, name
varchar(50) NOT NULL,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
FOREIGN KEY(role_id
) REFERENCES 역할
(id
),FK_role_id_user_id
FOREIGN KEY (user_id
) REFERENCES users
(id
)2. 사용자 권한 제어 시스템 구현
사용자는 애플리케이션과 상호작용하는 개인입니다. 각 사용자에게는 사용자가 수행하고 액세스할 수 있는 작업을 정의하는 하나 이상의 역할이 할당됩니다.
이제 이 시스템을 구현하는 방법을 살펴보겠습니다.
🎜🎜사용자 생성🎜🎜🎜각 신규 사용자에 대해 해당 사용자 기록을 생성해야 합니다. 사용자 이름, 비밀번호, 이메일 주소를 포함하여 각 사용자에 대한 기록을 "사용자" 테이블에 생성합니다. 다음 코드를 사용하여 사용자를 생성합니다. 🎜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; } }
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; } }
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; }
위 내용은 PHP 및 MySQL을 사용하여 강력한 사용자 권한 제어 시스템 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!