C 位運算處理許可權問題介紹

2021-06-16 10:39:54 字數 1044 閱讀 9497

常用的位運算主要有與(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在設計許可權時, 我們可以把許可權管理操作轉換為c#位運算來處理.

第一步, 先建立乙個列舉表示所有的許可權管理操作:

[flags]

public enum permissions  

[flags]表示該列舉可以支援c#位運算, 而列舉的每一項值, 我們用2的n次方來賦值, 這樣表示成二進位制時剛好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一種許可權, 1表示有該許可權, 0表示沒有.

接下來是許可權的運算:

1. 許可權的加法, 使用與運算來實現. 我們知道, 0001 | 0100 = 0101, 這樣就表示同時具有第一位和第三位的許可權管理了, 列舉表示為:

permissions per

= permissions

.insert | permissions.update 

2. 許可權的減法, 使用與運算+非運算來實現, 如上面要去掉insert許可權, 操作為:

permissions per &= ~permissions.insert即是 0101 & ~0001

= 0101

& 1110

= 0100

3. 許可權的判斷, 使用與運算, 當判斷用一使用者是否具有該操作許可權時, 要把使用者的的許可權與操作許可權進行與運算, 如果得到的結果仍是操作許可權管理, 則表示使用者具有該許可權:

permissions per

= permissions

.insert |  

permissions.update;  

if(per & permissions

permissions.insert

= permissions.insert)  

比較過程為 0101 & 0001 = 0001, 0001的0位用與c#位運算把其它位都置成0, 變成只比較1的這一位。

php 位運算許可權問題

許可權問題比如 linux角色許可權 可讀 可寫 可執行 許可權二進位制分別是100 010 001,十進位制就是4 2 1,資料庫許可權欄位若為state 預設為0,通常許可權都是多選框形式,如下圖 可執行 label 3div 4 br 5 div class row style margin ...

PHP位運算許可權設計

首先將許可權按照2的次方來定義值,依次類推 define add 1 增加許可權 define upd 2 修改許可權 define sel 4 查詢許可權 define del 8 刪除許可權 a access add upd sel del a擁有增刪改查許可權 b access add upd...

許可權操作與位運算

php 我這裡說到的許可權管理辦法是乙個普遍採用的方法,主要是使用到 位執行符 操作,位與運算子 位或執行符。參與運算的如果是10進製數,則會被轉換至2進製數參與運算,然後計算結果會再轉換為10進製數輸出。它的許可權值是這樣的 2 0 1,相應2進數為 0001 在這裡 我表示成 次方 即 2的0次...