基於按位與的許可權設計策略

2021-08-31 02:53:11 字數 1277 閱讀 5735

可能用到的:轉換為二進位制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實現一般管理系統的時候,我們會遇到這樣一種情況,作為乙個系統,可以分為若干個子系統,有多個操作員對它進行操作,每個操作員對各個子系統的許可權不同,甚至在同一子系統中,操作員對各個選單項的操作許可權也不一樣,更細一點,不同的操作員對於同一視窗中某一按鈕的操作許可權也是不一樣的,那麼,怎樣較好地實...