位操作实现权限绑定

时间:2021-08-07 05:52:22

第一次写技术博客,请大家批评指正。


今天老大交个一个任务,将数据中的权限部分由以前的字符串批注改成整形,即用二进制开关来实现权限的分配。

说明:以前我们做权限也都是一个字段 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
}
}
4、写入数据库。

同理,当你要读取这个权限的时候,就读出这个整数,然后判断每一位是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多种权限.


共同学习.,共同进步..