2014-12-02 117 views
0

我很感興趣的是編寫一個能夠幫助我爲不同用戶提供不同權限的類(即ACL類)。 我一直在研究一種很棒的方法,並且按位操作已經出來了!如何允許一些權限而不是其他使用按位系統的權限?

我發現了一篇好文章How to write a permission system using bits and bitwise operations in PHP。文章解釋如何使用按位操作處理權限。

我不知道如何做的唯一的事情是如何讓用戶寫評論,但不發佈線程。

因此,如果允許設置像這樣:

<?php 

    $perms = array(
     'can_post' => 1, 
     'can_comment' => 2, 
     'can_edit' => 4, 
     'can_delete' => 8 
    ); 


    $user_perms = 2;  

//CONDITION #1 
if ($user_perms & $perms['can_comment']) { 
    /* He/She has permission to do this */ 
} else { 
    /* He/She doesn't have permission */ 
} 


//CONDITION #2 
if ($user_perms & $perms['can_post']) { 
    /* He/She has permission to do this */ 
} else { 
    /* He/She doesn't have permission */ 
} 

?> 

所以上述CONDITION #1秀做工精細和意見應該被允許,但//CONDITION #2不應該被允許的,因爲用戶沒有發佈許可!

我的問題,如何讓用戶只發表評論但不發帖?發佈你將有'001',並評論你會'010'。

回答

1

一旦你定義了你的$perms陣列,實際上你可以用它創建自己的地圖:

// can comment and post but not edit or delete: 
$poster = $perms['can_post'] | $perms['can_comment']; 

// can edit and delete, but not comment or post: 
$janitor = $perms['can_delete'] | $perms['can_edit']; 

您可以將任意數量的權限與|運營商建設的許可值。

+0

這是否適用於十進制數或只有二進制數?我沒有看到任何二進制操作? – andrebruton 2015-03-10 13:08:21

+0

@andrebruton它只有在每個權限都是2的權力時纔有效。也就是說,你可以有一些聰明,比如'$ perms ['general_posting'] = 3;'擁有自動激活多個基本權限標誌的權限。 – 2015-03-10 15:10:52

+0

完美,得到它的工作! – andrebruton 2015-03-11 16:16:33