第一次寫技術博客,請大家批評指正。
今天老大交個一個任務,將數據中的權限部分由以前的字符串批註改成整形,即用二進制開關來實現權限的分配。
說明:以前我們做權限也都是一個字段 Power,然後讀取它的內容,比如“登陸,修改密碼,查看日誌”,讀到什麼就說明有什麼權限,有啥權限也就寫啥漢字進去。
現在的情況是事先設定好權限和位置,做一個開關,比如,上面三個權限用三位可以了, 從右到左,依次表示 登陸,修改密碼和查看日誌,假如某用戶用三個權限則爲:111,即7;假如只有第一個和第二個權限就是 011,就是3。
實現:
1、添加一個 checkboxlist ,關於這個的添加方法,自己google一下就知道了;
2、添加權限列表:
- m_CheckBoxList.AddString(L"登陸");
- m_CheckBoxList.AddString(L"修改密碼");
- m_CheckBoxList.AddString(L"查看日誌");
3、添加權限:
- typedef unsigned int RightVal;
- RightVal right =0;
- for (int i=0;i<32;i++)
- {
- if (m_CheckBoxList.GetCheck(i)==1)
- {
- right=right|((RightVal)1<<i); //或操作,哪個位置的權限被選擇了 就置1
- }
- }
同理,當你要讀取這個權限的時候,就讀出這個整數,然後判斷每一位是1還是0;
代碼如下:
- //設置被選擇的多選checkbox列表
- typedef unsigned int RightVal;
- RightVal right = m_int; //這個參數是從數據庫中讀取出來的
- for (int i=0;i<32;i++)
- {
- if (right&((RightVal)1<<i))//與操作,位置是1的說明有相應的權限
- {
- m_CheckBoxList.SetCheck(i,1);
- }
- }
其實,這裏的位操作,很靈活的,方法應該也不少,大家可以多想想。另外一個 int 是32位,這裏最多可以表示32種權限(unsigned int),所以三個權限是很浪費了哈,我就用了20多種權限.
共同學習.,共同進步..
http://blog.csdn.net/alfacuton/article/details/6764279
========================