2008-08-19 8 views
8

나는 이것을 여러 번 해보려고 노력했다. this post을 읽은 후, 다시이 작업을 수행하게되었습니다. 그럼 누가 왜 다음이 작동하지 않는지 말해 줄 수 있습니까?PHP에서 사용 권한 구현

<?php 

$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if($user == ($editor | $admin)) { 
    echo "Test";  
} 

?> 

답변

11

은 비트 OR 연산자를 사용 |을 (AND 연산자를 사용하여 비트를 설정() &)를 사용하여 비트를 검사합니다. 코드는 다음과 같아야합니다.

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if($user & ($editor | $admin)) { 
     echo "Test";  
    } 

?> 

비트 연산자를 정확히 이해하지 못하면 배워야합니다. 이 방법을 훨씬 잘 이해할 수 있습니다.

2

는 내가 PHP를 사용하기 때문에 오랜 시간이,하지만 난이 작동한다고 가정합니다 :

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if(($user == $editor) || ($user == $admin)) { 
     echo "Test";  
    } 

?> 
1

(2 | 4)는 6으로 평가되지만 2 == 6은 거짓입니다.

1

@mk : (2 | 4)이이 CMS에 권한이 할 수있는 최선의 방법처럼 보인다, 6

1
$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if (user == $editor || $user == $admin) { 
    echo "Test"; 
} 
1

최고에 평가합니다. 예? 아니?

어쩌면, 나는 그렇게 해본 적이 없을 것입니다. 내가 한 것은 비트 연산자를 사용하여 데이터베이스의 단일 열에 단일 숫자로 "예 또는 아니요"설정을 저장하는 것입니다.

권한에 따라 데이터베이스에 사용 권한을 저장하려는 경우이 방법이 유용 할 것입니다. 누군가가 어떤 콘텐츠를 게시하고 싶어, 단지 관리자 및 편집자는 그것을보고 싶은 경우에, 당신은 단지, 다음을 확인, 데이터베이스에

($editor | $admin) 

의 결과를 저장해야

if ($user & $database_row['permissions']) { 
     // display content 
} else { 
     // display permissions error 
} 
그런 짓을
0

제 의견으로는 이것은 잘 확장되지 않습니다. 나는 실제로 대규모 프로젝트에서이 프로젝트를 사용하려하지 않았지만 CMS는이를 사용하기 위해 복잡한 방법을 사용합니다.

6

바퀴를 다시 발명하지 않기 위해서 Zend ACLZend Auth과 같은 ACL/인증 시스템을 살펴 보시지 않겠습니까? 둘 다 Zend Framework 전체와 독립적으로 사용할 수 있습니다. 액세스 제어는 까다로운 상황이므로 적어도 다른 시스템이 어떻게 작동하는지 살펴보십시오.

0

항상 필요한 항목에 따라 다릅니다. 젠드 프레임 워크를 이미 알고 있다면 이전에 만들어진 Zend_Acl/_Auth 제안을 두 번째로 사용합니다. 그러나 모든 프레임 워크에는 비슷한 구성 요소가있을 수 있습니다.

다른 점은 LiveUser입니다. 나는 그것과 함께 일하는 것도 좋아한다.

나는 당신이 거의 모든 것을 할 수 있다고 생각한다. 당신의 접근 방식이 매우 단순 해 보이지만, (모든 사람들이()를 통해) ACL 논리를 중간에 넣을 수 있기 때문에 제한적이다. 너의 어플리케이션. 간단하고 확장 할 수있는 가장 좋은 방법은 아닙니다. ;)

2

나는 이것을 오류보고에 사용했으며 매우 잘 작동한다.사용자 권한에 관해서는 매우 잘 작동해야합니다 - 데이터베이스의 각 사용자 권한 또는 데이터베이스의 사용자 수준 열에 대해 여러 개의 열을 가질 수 있습니다. 이 옵션을 선택하십시오.