bitmask을 사용할 수 있습니다.
모든 권한이 예/아니오 조건 집합 인 경우 (또는 일반화 할 수있는 경우) 매우 쉽습니다.
예제에서 작성, 읽기, 업데이트 및 삭제가 있습니다. 4 비트이므로 권한을 저장하려면 4 비트 숫자가 필요합니다. (이진수는 0000에서 1111까지 십진수로 0에서 15까지)
읽을 수있는 사람은 0100 (십진수 4)의 권한을 가지며 작성/읽기/업데이트 할 수있는 사람은 pers1010 (14 진수) . 모든 권한을 가진 관리자는 persimissions 1111 (십진수로 15)을가집니다.
PHP에서 이들을 확인하는 방법은 비트 OR 연산자 |
입니다. 예를
// you could write a function getUserPermission($strUsername)
// which returns a permission number, say 10 (1010 in binary)
// which means he/she can create/update but not read/delete
$userPermissions = getUserPermission("TedWong");
$permissionCreate = 8; // 1000;
$permissionRead = 4; // 0100;
$permissionUpdate = 2; // 0010;
$permissionDelete = 1; // 0001;
if ($userPermissions | $permissionCreate)
{
//user has permission to create
}
if ($userPermissions | $permissionRead)
{
//User has permission to read
}
if (!($userPermissions | $permissionDelete))
{
//User doesn't have permission to delete
}
if ($userPermissions | $permissionUpdate &&
$userPermissions | $permissionCreate)
{
//User has permission to create and update.
}
더 많은 권한을 원하는 경우에 대한
, 당신은 더 많은 비트를 도입 할 필요가있다.
예제에서 모든 게시물을 게시/삭제할 때 작성, 읽기, 삭제, UpdateOwn, UpdateAll과 같은 5 비트 권한 구조가 있습니다.
많은 권한을 가질 수 있지만 권한을 저장할 수있는 데이터 구조에 의해 제한됩니다. 예를 들어, 32 비트 정수에 사용 권한 마스크를 저장하는 경우 최대 32 개의 사용 권한 만 가질 수 있습니다.
0000 // 0: No Permissions
0001 // 1: Delete
0010 // 2: Update
0011 // 3: Delete + Update
0100 // 4: Read
0101 // 5: Read + Delete
0110 // 6: Read + Update
0111 // 7: Read + Delete + Update
1000 // 8: Create
1001 // 9: Create + Delete
1010 // 10: Create + Update
1011 // 11: Create + Delete + Update
1100 // 12: Create + Read
1101 // 13: Create + Read + Delete
1110 // 14: Create + Read + Update
1111 // 15: Create + Read + Delete + Update
는 그래서가 6 ( 이진가 0110 동일하다) 권한을 부여하는 INTEGER을 의미한다 : 여기
는 예를 들면 4 비트의 사용 권한의 전체 목록 읽기/업데이트는 가능하지만 작성/삭제는 할 수 없습니다. 동일한 방법으로 각 정수에는 이와 관련된 사용 권한 집합이 있습니다. 해당 정수를 나타내는 많은 비트 (정수 32 개)를 정수에 최대 한도까지 저장할 수 있습니다. 4 비트 정수 (십진수 0-15)로 4 개의 예/아니오 권한을 얻을 수 있음을 알 수 있습니다. 32- 정수를 사용하는 경우 최대 32 개의 예/아니오 권한을 가질 수 있습니다.
정수의 최대 크기를 결정하는 방법은 PHP documentation을 확인하십시오. (PHP 파서를 실행중인 플랫폼에 따라 다름). 필자는 일반적으로 32 비트 시스템/OS가 32 비트 정수를 허용하고 64 비트 시스템/OS가 64 비트 정수를 허용한다고 생각합니다.
비트 마스크와 다른 방법의 장점/단점에 대한 논의는 these other threads을 확인하십시오.
다음과 같이 사용할 수 있습니다. http://en.wikipedia.org/wiki/Access_control_list – NullUserException