用戶權力詳解 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 用戶權力詳解 (http://www.webasp.net/article/17/16938.htm) |
| -- 作者:retidy -- 發佈日期: 2005-03-11 |
| 有耐心就看完(還是算法重要)
用戶初始權值: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,即擁有第一、四、五、六、七、八項權力。 到此結束,希望沒有浪費您的時間,對您有所啟發。 |
| webasp.net |