웹 시스템에서 사용자 권한 제어가 매우 중요한 부분입니다. 합리적인 권한 시스템은 시스템의 민감한 데이터를 보호 할뿐만 아니라 사용자가 액세스 해야하는 컨텐츠에만 액세스 할 수 있도록 보장 할 수 있습니다. PHP에서는 Bindec () 함수를 사용하여 비트 작업을 결합하여 효율적이고 확장하기 쉬운 권한 제어 메커니즘을 구축 할 수 있습니다. 이 기사는이 두 가지를 사용하여 사용자 권한 시스템을 구축하는 방법을 자세히 소개합니다.
권한 제어의 핵심 아이디어는 각 권한을 이진 비트로 추상화하는 것입니다. 예를 들어, 8 비트 권한 필드는 8 가지 유형의 권한을 나타내고 각 비트에서 1 또는 0은 권한이 활성화되어 있는지 여부를 나타냅니다.
예를 들어 다음 권한이 정의되었다고 가정합니다.
권한 위치 | 권한 값 | 권한 이름 |
---|---|---|
0 | 1 | 내용을 봅니다 |
1 | 2 | 컨텐츠 편집 |
2 | 4 | 컨텐츠 삭제 |
3 | 8 | 내용을 검토하십시오 |
4 | 16 | 사용자를 관리합니다 |
5 | 32 | 게시 컨텐츠 |
6 | 64 | 보고서보기 |
7 | 128 | 슈퍼 관리자 |
사용자의 권한은 활성화 및 비활성화 권한 세트를 나타내는 이진 문자열 (예 : "10101010" )으로 표시 될 수 있습니다. 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인지 여부를 결정합니다.이 방법으로 사용자에게 특정 권한이 있는지 쉽게 결정할 수 있습니다.
사용자에게 권한을 부여하려면 권한 비트 ( | ) 만 수행하거나 계산하면됩니다.
<?php
$userPermissions = 0; // 초기 허가는입니다0
// 추가“내용을 봅니다”그리고“게시 컨텐츠”권한
$userPermissions |= PERM_VIEW;
$userPermissions |= PERM_PUBLISH;
echo $userPermissions; // 출력은입니다33
?>
특정 허가를 취소하려면 비 ( & ~ ) 운영이 필요합니다.
<?php
// 原始권한为:먹다、편집하다、풀어 주다(지금 바로 1 + 2 + 32 = 35)
$userPermissions = 35;
// 취소“편집하다”권한
$userPermissions &= ~PERM_EDIT;
echo $userPermissions; // 결과는입니다33
?>
권한 값은 결국 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 "컨텐츠를 삭제할 권한이 없습니다";
}
?>
배경 관리 시스템을 예로 들어, 관리자가 로그인하면 시스템은 특정 기능 버튼을 표시할지 여부를 결정해야합니다. 다음과 같이 템플릿에서 제어 할 수 있습니다.
<?php
if ($adminPermissions & PERM_USER) {
echo '<a href="https://m66.net/admin/users">사용자를 관리합니다</a>';
}
?>
비트 운영을 통해 구현 된이 권한 제어 방법은 다음과 같은 장점이 있습니다.
스토리지 절약 : 모든 권한은 하나의 정수 필드로 병합되어 공간을 절약합니다.
효율적인 쿼리 : BIT 작업을 통해 권한 판단이 완료되며 속도는 매우 빠릅니다.
확장 유연성 : 새 권한 비트를 추가하여 새 권한 유형을 추가하십시오.
비교적 고정 권한 유형의 중소형 시스템 또는 시나리오에 적합합니다. 시스템 권한이 복잡하고 다차원 제어가 필요한 경우 데이터베이스와 결합 된 RBAC (역할 기반 액세스 제어) 모델을 사용하여 더 미세한 과립 관리를 달성하는 것이 좋습니다.
Bindec () 및 비트 작동의 조합을 통해 간단하고 효율적인 사용자 권한 관리 방법을 구현할 수 있습니다. PHP의 이진 및 정수를 조작하는 것이 매우 편리하며 경량 권한 제어 시스템을 구축하는 데 매우 적합합니다. 실제 프로젝트에서는 허가 상수와 판단 논리를 클래스 또는 기능으로 캡슐화하여 유지 관리 및 가독성을 향상시키는 것이 좋습니다.