현재 위치: > 최신 기사 목록> bindec () 및 비트 작업과 함께 사용자 권한 사용

bindec () 및 비트 작업과 함께 사용자 권한 사용

M66 2025-05-29

웹 시스템에서 사용자 권한 제어가 매우 중요한 부분입니다. 합리적인 권한 시스템은 시스템의 민감한 데이터를 보호 할뿐만 아니라 사용자가 액세스 해야하는 컨텐츠에만 액세스 할 수 있도록 보장 할 수 있습니다. PHP에서는 Bindec () 함수를 사용하여 비트 작업을 결합하여 효율적이고 확장하기 쉬운 권한 제어 메커니즘을 구축 할 수 있습니다. 이 기사는이 두 가지를 사용하여 사용자 권한 시스템을 구축하는 방법을 자세히 소개합니다.

1. 기본 아이디어

권한 제어의 핵심 아이디어는 각 권한을 이진 비트로 추상화하는 것입니다. 예를 들어, 8 비트 권한 필드는 8 가지 유형의 권한을 나타내고 각 비트에서 1 또는 0은 권한이 활성화되어 있는지 여부를 나타냅니다.

예를 들어 다음 권한이 정의되었다고 가정합니다.

권한 위치 권한 값 권한 이름
0 1 내용을 봅니다
1 2 컨텐츠 편집
2 4 컨텐츠 삭제
3 8 내용을 검토하십시오
4 16 사용자를 관리합니다
5 32 게시 컨텐츠
6 64 보고서보기
7 128 슈퍼 관리자

사용자의 권한은 활성화 및 비활성화 권한 세트를 나타내는 이진 문자열 (예 : "10101010" )으로 표시 될 수 있습니다. Bindec ()을 사용 하여이 문자열을 소수점 숫자로 변환 한 다음 비트 작업을 사용하여 특정 권한이 활성화되어 있는지 확인할 수 있습니다.

2. Bindec () 및 비트 작업을 사용하여 권한을 결정하십시오

먼저, 특정 사용자의 권한 값이 170 , 즉 이진의 10101010 이며 1, 3, 5 및 7의 권한이 있다고 가정합니다.

다음 코드를 사용하여 특정 권한이 있는지 확인할 수 있습니다.

 <?php
// 권한 상수를 정의하십시오
define('PERM_VIEW', 1);      // 00000001
define('PERM_EDIT', 2);      // 00000010
define('PERM_DELETE', 4);    // 00000100
define('PERM_APPROVE', 8);   // 00001000
define('PERM_USER', 16);     // 00010000
define('PERM_PUBLISH', 32);  // 00100000
define('PERM_REPORT', 64);   // 01000000
define('PERM_ADMIN', 128);   // 10000000

// 사용자의 권한 가치가 있다고 가정하십시오170(이진10101010)
$userPermissions = 170;

// 편집 권한이 있는지 확인하십시오
if ($userPermissions & PERM_EDIT) {
    echo "사용자는 편집 권한이 있습니다";
} else {
    echo "사용자에게는 편집 권한이 없습니다";
}
?>

위의 코드는 & 운영자를 사용하여 지정된 권한 비트가 1인지 여부를 결정합니다.이 방법으로 사용자에게 특정 권한이 있는지 쉽게 결정할 수 있습니다.

3. 보조금 권한

사용자에게 권한을 부여하려면 권한 비트 ( | ) 만 수행하거나 계산하면됩니다.

 <?php
$userPermissions = 0; // 초기 허가는입니다0

// 추가“내용을 봅니다”그리고“게시 컨텐츠”권한
$userPermissions |= PERM_VIEW;
$userPermissions |= PERM_PUBLISH;

echo $userPermissions; // 출력은입니다33
?>

4. 철회 권한

특정 허가를 취소하려면 비 ( & ~ ) 운영이 필요합니다.

 <?php
// 原始권한为:먹다、편집하다、풀어 주다(지금 바로 1 + 2 + 32 = 35)
$userPermissions = 35;

// 취소“편집하다”권한
$userPermissions &= ~PERM_EDIT;

echo $userPermissions; // 결과는입니다33
?>

5. 데이터베이스 스토리지 권한과 결합

권한 값은 결국 int를 유형의 사용자 테이블의 권한 필드와 같은 데이터베이스 필드에 저장할 수 있습니다.

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    permissions INT DEFAULT 0
);

사용자 권한을 읽고 확인하십시오.

 <?php
// 假设从数据库中取出권한字段为 $permissions
$permissions = 170;

if ($permissions & PERM_DELETE) {
    echo "콘텐츠를 삭제할 수 있습니다";
} else {
    echo "컨텐츠를 삭제할 권한이 없습니다";
}
?>

6. 실제 적용 사례

배경 관리 시스템을 예로 들어, 관리자가 로그인하면 시스템은 특정 기능 버튼을 표시할지 여부를 결정해야합니다. 다음과 같이 템플릿에서 제어 할 수 있습니다.

 <?php
if ($adminPermissions & PERM_USER) {
    echo '<a href="https://m66.net/admin/users">사용자를 관리합니다</a>';
}
?>

7. 장점 및 적용 가능한 시나리오

비트 운영을 통해 구현 된이 권한 제어 방법은 다음과 같은 장점이 있습니다.

  • 스토리지 절약 : 모든 권한은 하나의 정수 필드로 병합되어 공간을 절약합니다.

  • 효율적인 쿼리 : BIT 작업을 통해 권한 판단이 완료되며 속도는 매우 빠릅니다.

  • 확장 유연성 : 새 권한 비트를 추가하여 새 권한 유형을 추가하십시오.

비교적 고정 권한 유형의 중소형 시스템 또는 시나리오에 적합합니다. 시스템 권한이 복잡하고 다차원 제어가 필요한 경우 데이터베이스와 결합 된 RBAC (역할 기반 액세스 제어) 모델을 사용하여 더 미세한 과립 관리를 달성하는 것이 좋습니다.

결론

Bindec () 및 비트 작동의 조합을 통해 간단하고 효율적인 사용자 권한 관리 방법을 구현할 수 있습니다. PHP의 이진 및 정수를 조작하는 것이 매우 편리하며 경량 권한 제어 시스템을 구축하는 데 매우 적합합니다. 실제 프로젝트에서는 허가 상수와 판단 논리를 클래스 또는 기능으로 캡슐화하여 유지 관리 및 가독성을 향상시키는 것이 좋습니다.