定義許可權列舉
[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 ...