許可權位操作

2021-09-06 02:25:02 字數 1314 閱讀 7246

定義許可權列舉

[flags]

public enum guicontroltypes

構建許可權

guicontroltypes docontrols = guicontroltypes.aarcontrol | guicontroltypes.commandcontrol | guicontroltypes.fmcontrol | guicontroltypes.mapcontrol | guicontroltypes.selectcontrol;

initflashcontrol(docontrols);

判斷許可權

if ((type & guicontroltypes.taskcontrol)==guicontroltypes.taskcontrol)

參考資料:

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

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 & permissionspermissions.insert = permissions.insert)   

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

解讀SUID許可權位

什麼是suid?聽著是不是很高大上,其實沒有啦!所謂的suid其實就是為了檔案共享設計的,啊?啥意思?還是聽不懂對不對?沒有關係,請聽我繼續囉嗦。所謂suid就是給檔案所有者賦予s許可權位,我舉個例子 普通使用者也可以給自己改密碼,為什麼?大家來看一下passwd這個命令的許可權 看到了那個s了嗎?...

解讀SUID許可權位

什麼是suid?聽著是不是很高大上,其實沒有啦!所謂的suid其實就是為了檔案共享設計的,啊?啥意思?還是聽不懂對不對?沒有關係,請聽我繼續囉嗦。所謂suid就是給檔案所有者賦予s許可權位,我舉個例子 普通使用者也可以給自己改密碼,為什麼?大家來看一下passwd這個命令的許可權 看到了那個s了嗎?...

設定特殊許可權位

設定特殊許可權位 檔案 目錄 基本許可權 特殊檔案 命令 uid gid 使用者標誌身份的唯一數字 500 500 程序執行 euid egid 使用者 zhy su zhy ps 500 500 chmod u s bin vi boot rwxr xr x root root bin viss ...