可能用到的:轉換為二進位制integer.tobinarystring(int i)
[size=medium]一、理論設計[/size]
該系統許可權管理策略是基於按位運算處理許可權的方法來實現的。首先將所有許可權組成乙個列表,並賦予某個不重複的整型值,例如:
操作 許可權編號
——— ——
產品分類管理 0
部門設定 1
產品/原料資訊 2
客戶資訊管理 3
倉庫管理 4
…… ……
理論上可以有n個操作。這樣,如果使用者a有以下許可權:
倉庫管理
部門設定
則使用者a的許可權值power_value=2^4+2^1=18,化成二進位制為10010。然後在根據公式:
int result = power_value&((int)math.pow(base,index));(注:math.pow(2,4)表示2^4);
來判斷是否有相關許可權,如果result =base^index則說明有該許可權。下面給出乙個例子。
如果要驗證使用者a是否有倉庫管理的許可權,則可通過按位與來計算。
int result = power_value&((int)math.pow(2,4));
即:10010
& 10000
——————
10000
得到的結果為result = 10000=2^4;即使用者a有倉庫管理的許可權;
如果要驗證使用者a是否有產品/原料資訊管理的許可權,則:
int result = power_result&((int)math.pow(2,2))
即:10010
& 00100
——————
00000
得到的結果為result = 00000!=2^2;即使用者a沒有產品/原料資訊管理的許可權。
[size=medium]二、許可權的資料庫設計[/size]
該許可權控制策略要用至少3張資料庫表來實現
表一:許可權資源表(poweraction):
名稱 欄位名 字段型別 是否為空 主外來鍵
資源id id 自增 否 主鍵
資源url url varchar(255) 否
資源名稱 action varchar(255) 否
資源值 value int 否
表二使用者許可權表(user_power):
名稱 欄位名 字段型別 是否為空 主外來鍵
使用者id userid varchar(20) 否 外來鍵
許可權值 power_value int 否
高併發請求的快取設計策略
1.為何需要快取?在高併發請求時,為何我們頻繁提到快取技術?最直接的原因是,目前磁碟io和網路io相對於記憶體io的成百上千倍的效能劣勢。做個簡單計算,如果我們需要某個資料,該資料從資料庫磁碟讀出來需要0.1s,從交換機傳過來需要0.05s,那麼每個請求完成最少0.15s 當然,事實上磁碟和網路io...
讀寫鎖設計策略與效能詳細分析
很多時候,對共享變數的訪問有以下特點 大多數情況下執行緒只是讀取共享變數的值,並不修改,只有極少數情況下,執行緒才會真正地修改共享變數的值。對於這種情況,讀請求之間之間是無需同步的,他們之間的併發訪問是安全的。但是必須互斥寫請求和其他讀請求。這種情況在實際中是存在的,比如配置項。大多數時間內,配置是...
PBAC基於策略的許可權控制
在pb實現一般管理系統的時候,我們會遇到這樣一種情況,作為乙個系統,可以分為若干個子系統,有多個操作員對它進行操作,每個操作員對各個子系統的許可權不同,甚至在同一子系統中,操作員對各個選單項的操作許可權也不一樣,更細一點,不同的操作員對於同一視窗中某一按鈕的操作許可權也是不一樣的,那麼,怎樣較好地實...