2012-07-23 48 views
3

我打算使用二進制系統來處理我的權限,就像這樣:當您擁有二元系統的許多權限時該怎麼辦?

<?php 
const POST = 1; 
const DELETE = 2; 
const UPDATE = 4; 
const READ = 8; 
const ADMIN = 16; 
const ADD_PRODUCT = 32; 
const DELETE_PRODUCT = 64; 
const ADD_BLOG = 128; 


$permission = decbin('5'); 

if ($permission & POST) { echo "POST <br />"; } 
if ($permission & DELETE) { echo "DELETE <br />"; } 
if ($permission & UPDATE) { echo "UPDATE <br />"; } 
if ($permission & READ) { echo "READ <br />"; } 
if ($permission & ADMIN) { echo "ADMIN <br />"; } 

?> 

少數權限,這將很好地工作。但是,如果我有,可以說,40個不同的權限?然後,我需要加上一些非常大的數字,這是一個痛苦的屁股。

有沒有其他辦法?

任何信息或幫助將大大appriciated!

+0

當你說「二進制」,你真的使用[「位掩碼」(HTTP鍵入: //en.wikipedia.org/wiki/Mask_%28computing%29)。 – nickb 2012-07-23 20:21:40

+1

如果您有40個權限,請勿使用位掩碼來存儲它們,至少不要在您的代碼中。使其數據驅動。 – 2012-07-23 20:22:32

+0

當然,我會將它們存儲在一個數據庫中,這僅僅是一個例子。我忘了提及那個,對不起。您能否更詳細地解釋一下數據驅動的含義? – BlueCola 2012-07-23 20:28:06

回答

0

1)使用十六進制來定義常量 - 輸入起來要容易得多。

2)將單獨的權限分解爲不同的用戶角色。

例如

const BLOG_POST  = 0x01; 
const BLOG_DELETE = 0x02; 
const BLOG_UPDATE = 0x04; 
const BLOG_READ  = 0x08; 
const BLOG_SUBSCRIBE = 0x10; 

const ADMIN_IS_ADMIN  = 0x01; 
const ADMIN_ADD_PRODUCT = 0x02; 
const ADMIN_DELETE_PRODUCT = 0x04; 
const ADMIN_ADD_BLOG  = 0x08; 

即使當你起牀到大的數字,他們仍然容易

const ADMIN_SOME_PERMISSION = 0x1000; 
const ADMIN_SOME_PERMISSION2 = 0x2000;