使用者權力詳解_PHP
來源:互聯網
上載者:User
關鍵字
詳解
權力
使用者
Enable
擁有
第一
有耐心就看完(還是演算法重要)
使用者初始權值:Enable = 0;
假如一個使用者有第一項權力Select,則使用者權值:Enable = Enable + 1;
假如一個使用者有第二項權力Insert,則使用者權值:Enable = Enable + 2;
假如一個使用者有第三項權力Update,則使用者權值:Enable = Enable + 4;
假如一個使用者有第四項權力Delete,則使用者權值:Enable = Enable + 8;
為什麼依次+1、+2、+4、+8,而不是+1、+2、+3、+4呢?
假如是+1、+2、+3、+4:
假如一個使用者有第一項權力Select,則使用者權值:Enable = Enable + 1;
假如一個使用者有第二項權力Insert,則使用者權值:Enable = Enable + 2;
假如一個使用者有第三項權力Update,則使用者權值:Enable = Enable + 3;
假如一個使用者有第四項權力Delete,則使用者權值:Enable = Enable + 4;
那麼當使用者權值:Enable = 3時,你就無法判斷使用者到底是同時擁有
第一項權力Select和第二項權力Insert兩項權利,還是僅擁有第三項權力Update,
前一種權值演算法就可以避免這種情況。
但是當採用前一種權值演算法時,怎樣由使用者的權值Enable快速知道使用者擁有哪幾項權
力呢?假如是使用者權值Enable = 5,使用者擁有第一項權力Select和第三項權力Update,
注意不擁有第二項權力Insert。
下面我將使用者權力列表:
權力 擁有權力使用者的權值Enable
SelectItem:( 1, 3, 5, 7, 9, 11, 13, 15 )
InsertItem:( 2, 3, 6, 7, 10, 11, 14, 15 )
UpdateItem:( 4, 5, 6, 7, 12, 13, 14, 15 )
DeleteItem:( 8, 9, 10, 11, 12, 13, 14, 15 )
可見並不是權值Enable大的使用者就擁有“更多”的權力,
假如 :使用者權值Enable = 3,使用者擁有第一項權力(Select)和第二項權力(Insert),共兩項權利,
使用者權值Enable = 4,使用者擁有第三項權力(Update),僅一項權利。
仔細觀察“使用者權力列表”:
SelectItem:( 1, 3, 5, 7, 9, 11, 13, 15 ): 1 = 0 + 2 的0次冪;3 = 2 的1次冪 + 2 的0次冪;5 = 2 的2次冪 + 2 的0次冪;
InsertItem:( 2, 3, 6, 7, 10, 11, 14, 15 ): 2 = 0 + 2 的1次冪;3 = 2 的0次冪 + 2 的1次冪;6 = 2 的2次冪 + 2 的1次冪;
UpdateItem:( 4, 5, 6, 7, 12, 13, 14, 15 ): 4 = 0 + 2 的2次冪;5 = 2 的0次冪 + 2 的2次冪;6 = 2 的2次冪 + 2 的2次冪;
DeleteItem:( 8, 9, 10, 11, 12, 13, 14, 15 ):8 = 0 + 2 的3次冪;9 = 2 的0次冪 + 2 的3次冪 10 = 2 的1次冪 + 2 的3次冪;
規律總結如下:
擁有第一項權力Select使用者的權值:Enable = ? + 2 的0次冪;(其中?亦必須拆成2 的N次冪相加的情況)
擁有第二項權力Insert使用者的權值:Enable = ? + 2 的1次冪;(其中?亦必須拆成2 的N次冪相加的情況)
擁有第三項權力Update使用者的權值:Enable = ? + 2 的2次冪;(其中?亦必須拆成2 的N次冪相加的情況)
擁有第四項權力Delete使用者的權值:Enable = ? + 2 的3次冪;(其中?亦必須拆成2 的N次冪相加的情況)
到此已經很清楚了:
只要將使用者的權值Enable拆成2 的N次冪相加的情況,
如果其中有N=0,則擁有第一項權力Select,
如果其中有N=1,則擁有第二項權力Insert,
如果其中有N=2,則擁有第三項權力Update,
如果其中有N=3,則擁有第四項權力Delete,
那麼怎樣將使用者權值Enable快拆成2 的N次冪相加的情況呢?
呵呵!只要將Enable轉化為二進位,從右向左依次取基,若基為的位則擁有相應權利,
舉例:
(11)10=(1011)2,即擁有第一、二、四項權力,和“使用者權力列表”相符;
(12)10=(1100)2,即擁有第三、四項權力,和“使用者權力列表”相符;
(15)10=(1111)2,即擁有第一、二、三、四項權力,和“使用者權力列表”相符;
當權利等級極其複雜時,該演算法可以很快知道使用者權力:
例如:
共8個等級,使用者權值Enable=67;(67)10=(1000011)2,即擁有第一、六、七項權力,
使用者權值Enable=67;(159)10=(10011111)2,即擁有第一、四、五、六、七、八項權力。
到此結束,希望沒有浪費您的時間,對您有所啟發。