2008-08-19 62 views
8

我試過這樣做了幾次,沒有運氣。在閱讀this post之後,它讓我有興趣再次這樣做。那麼有誰能告訴我爲什麼以下不起作用?在PHP中實現權限

<?php 

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

$user = $editor; 

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

?> 

回答

11

使用位或操作符(|)來設置位,使用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)計算結果爲6

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

$user = $editor; 

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

真棒,這似乎是做權限在CMS的最佳途徑。是?沒有?

也許,我從來沒有真正這樣做過。我所做的是使用按位運算符將大量「是或否」設置存儲在數據庫的單個列中的單個數字中。

我想獲得權限,如果你想要在數據庫中存儲權限,這種方式會很好。如果有人想發佈一些內容,而只希望管理員和編輯看到它,你只需要的

($editor | $admin) 

結果存儲到數據庫中,然後檢查一下,這樣做

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

在我看來這並不好。我實際上並沒有嘗試在大型項目中使用它,但CMS使用這種方法聽起來很複雜。

6

爲了不重複發明輪子,爲什麼不看看ACL /認證系統,如Zend ACLZend Auth?兩者都可以獨立於Zend Framework整體使用。訪問控制是一個棘手的情況,所以它至少可以幫助人們瞭解其他系統如何實現它。

0

它總是取決於你需要什麼。如果你已經知道了Zend Framework,那麼我會先介紹一下Zend_Acl/_Auth的建議。但請記住,每個框架都可以提供類似的組件。

想到的另一件事是LiveUser。我也很喜歡與它一起工作。我認爲你可以做很多事情,而你的方法看起來很簡單,但它也是有限的,因爲(通過所有這些if()的),你會把很多ACL邏輯放在正確的位置你的申請。爲了保持簡單和可擴展性,這不是最重要的事情。 ;)

2

我已經在錯誤報告中使用了它,它工作得很好。至於用戶權限,它應該工作得很好 - 您可以爲數據庫中的每個用戶權限或數據庫中的一個用戶級別列創建多個列。去這個選項。