PHP 및 MySQL을 사용하여 강력한 사용자 권한 제어 시스템 구현

WBOY
풀어 주다: 2023-06-25 10:16:01
원래의
1311명이 탐색했습니다.

최신 웹 애플리케이션에서는 사용자 권한 제어가 중요합니다. 애플리케이션의 보안과 무결성을 보장하려면 특정 작업 및 정보에 대한 사용자 액세스를 제한하고 사용자가 수행할 수 있는 특정 작업을 정의해야 합니다. 이 기사에서는 PHP와 MySQL을 사용하여 웹 애플리케이션의 보안과 무결성을 보장하는 강력한 사용자 권한 제어 시스템을 만드는 방법을 소개합니다.

1. 데이터베이스 테이블 설계

MySQL 데이터베이스에서는 사용자 권한 제어 시스템을 구현하기 위해 최소 두 개의 테이블이 필요합니다. 첫 번째 테이블에는 사용자 이름, 비밀번호, 이메일 주소를 포함한 모든 사용자의 기본 정보가 기록됩니다. 두 번째 테이블은 각 역할/사용자 그룹의 권한을 기록하는 권한 테이블입니다. 따라서 데이터베이스에 다음 두 테이블을 생성해야 합니다:

  1. users table

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)
);

  1. roles表

CREATE TABLE roles (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
PRIMARY KEY (id)
);

我们还需要一个将用户和角色关联的表。这个表将用户ID映射到角色ID。让我们来创建这个表。

  1. role_user表

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,

PRIMARY KEY (id)

);

  1. roles table

CREATE TABLE roles (

id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(50) NOT NULL,
  1. PRIMARY KEY (id)
  2. );

사용자와 역할을 연결하는 테이블도 필요합니다. 이 테이블은 사용자 ID를 역할 ID에 매핑합니다. 이 테이블을 만들어 보겠습니다.

  1. role_user 테이블

CREATE TABLE role_user (

role_id int(11) NOT NULL,

user_id int(11) NOT NULL ,

기본 키(role_id,user_id),
    CONSTRAINT FK_role_user_role_id FOREIGN KEY(role_id) REFERENCES 역할 (id),
  1. CONSTRAINT FK_role_id_user_id FOREIGN KEY (user_id) REFERENCES users (id)
  2. );

2. 사용자 권한 제어 시스템 구현

    이제 필요한 데이터베이스 테이블을 만들었으므로 애플리케이션에 대한 사용자 권한 제어 시스템 구현을 시작할 수 있습니다. 다음은 몇 가지 기본 개념입니다.
Role

    역할은 일련의 권한을 함께 연결하는 논리적 구조입니다. 예를 들어 "관리자" 역할을 생성하고 이 역할에 모든 관리 관련 권한을 부여할 수 있습니다.
권한

    권한은 특정 기능에 대한 제어 권한입니다. 예를 들어 사용자 보기, 만들기, 편집, 삭제는 서로 다른 권한입니다. 특정 역할에 이러한 권한을 부여하면 사용자의 액세스가 제한됩니다.
Users

사용자는 애플리케이션과 상호작용하는 개인입니다. 각 사용자에게는 사용자가 수행하고 액세스할 수 있는 작업을 정의하는 하나 이상의 역할이 할당됩니다.

이제 이 시스템을 구현하는 방법을 살펴보겠습니다.

🎜🎜사용자 생성🎜🎜🎜각 신규 사용자에 대해 해당 사용자 기록을 생성해야 합니다. 사용자 이름, 비밀번호, 이메일 주소를 포함하여 각 사용자에 대한 기록을 "사용자" 테이블에 생성합니다. 다음 코드를 사용하여 사용자를 생성합니다. 🎜
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;
  }
}
로그인 후 복사
🎜🎜사용자 역할 할당🎜🎜🎜이제 사용자와 역할을 생성했으므로 이들을 연결해야 합니다. 역할은 "role_user" 테이블에 역할 ID와 사용자 ID를 삽입하여 할당할 수 있습니다. 다음은 몇 가지 샘플 코드입니다. 🎜
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을 사용하여 사용자 권한 제어 시스템을 만들면 웹 애플리케이션의 보안과 무결성을 보장할 수 있습니다. 역할 및 권한에 따라 특정 작업 및 정보에 대한 사용자 액세스를 제한할 수 있습니다. 이 시스템을 통해 웹 애플리케이션을 무단 액세스로부터 보호하여 전반적인 보안을 향상시킬 수 있습니다. 🎜

위 내용은 PHP 및 MySQL을 사용하여 강력한 사용자 권한 제어 시스템 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!