位操作实现权限绑定

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


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

说明:以前我们做权限也都是一个字段 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多种权限.


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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值