采用按位与(&)按位或(|)进行权限检查的简单例子
来源:互联网 发布:淘宝开店装修免费模板 编辑:程序博客网 时间:2024/06/06 09:41
最近,做了些关于权限的功能模块。平时,很少用到按位或(|)按位与(&)这样的符号,尤其是连用的情况。
今天就针对这种情况做了个简单的例子,希望能帮助初接触这类符号的人。
先看例子的界面,然后针对界面我再进行实例功能的简单介绍。
左侧是我定义的几个简单的权限项,右侧是定义的用户具有的权限项。左右按钮是用来对用户当前的权限进行添加删除操作的。下方的测试是用来检测我们给用户添加的权限是否正确。(如下图)
下面我们看一下代码实现:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace PowerTest{ public partial class FormMain : Form { [Flags] public enum Power : uint { None = 0x00000000, Read = 0x00000001, Write = 0x00000002, Modify = 0x00000004, Delete = 0x00000010, } Power power; public FormMain() { InitializeComponent(); } private void FormMain_Load(object sender, EventArgs e) { listBox_AllPower.Items.Add("Read"); listBox_AllPower.Items.Add("Write"); listBox_AllPower.Items.Add("Modify"); listBox_AllPower.Items.Add("Delete"); comboBox_HasPower.Items.Add("Read"); comboBox_HasPower.Items.Add("Write"); comboBox_HasPower.Items.Add("Modify"); comboBox_HasPower.Items.Add("Delete"); } private void button_Add_Click(object sender, EventArgs e) { if (listBox_AllPower.SelectedItem == null) return; listBox_MyPower.Items.Add(listBox_AllPower.SelectedItem); listBox_AllPower.Items.Remove(listBox_AllPower.SelectedItem); power = Power.None; foreach (object obj in listBox_MyPower.Items) { switch (obj.ToString()) { case "Read": power = power | Power.Read; break; case "Write": power = power | Power.Write; break; case "Modify": power = power | Power.Modify; break; case "Delete": power = power | Power.Delete; break; } } } private void button_Delete_Click(object sender, EventArgs e) { if (listBox_MyPower.SelectedItem == null) return; listBox_AllPower.Items.Add(listBox_MyPower.SelectedItem); listBox_MyPower.Items.Remove(listBox_MyPower.SelectedItem); power = Power.None; foreach (object obj in listBox_MyPower.Items) { switch (obj.ToString()) { case "Read": power = power | Power.Read; break; case "Write": power = power | Power.Write; break; case "Modify": power = power | Power.Modify; break; case "Delete": power = power | Power.Delete; break; } } } private void button_PowerTest_Click(object sender, EventArgs e) { if (comboBox_HasPower.SelectedItem == null) { MessageBox.Show("请选择要测试的权限"); return; } if (listBox_MyPower.Items.Count < 1) { MessageBox.Show("用户不具有任何权限"); return; } switch (comboBox_HasPower.SelectedItem.ToString()) { case "Read": if ((power & Power.Read) > 0) MessageBox.Show("用户具有Read权限"); else MessageBox.Show("用户不具有Read权限"); break; case "Write": if ((power & Power.Write) > 0) MessageBox.Show("用户具有Write权限"); else MessageBox.Show("用户不具有Write权限"); break; case "Modify": if ((power & Power.Modify) > 0) MessageBox.Show("用户具有Modify权限"); else MessageBox.Show("用户不具有Modify权限"); break; case "Delete": if ((power & Power.Delete) > 0) MessageBox.Show("用户具有Delete权限"); else MessageBox.Show("用户不具有Delete权限"); break; } } }}
在最顶端,我们定义了权限项枚举类。
在对用户权限进行添加、删除操作时,我们使用了按位或(|)算法。
在验证用户是否具有指定权限时,我们使用了按位与(&)算法。
实例源代码下载
- 采用按位与(&)按位或(|)进行权限检查的简单例子
- js中的位运算符(按位与、按位或、按位异或)的使用方法
- 按位与、按位或、按位异或、左移、右移运算符的简单介绍(部分二进制运算符的简单介绍)
- PHP按位与(^),按位或(&)笔记
- 屌丝也用按位与(&),按位或(|) (二)
- 位运算-按位与,按位或,按位异或
- DB2的函数(实现按位与或)
- Java 按位与(&)和短路与(&&)按位或(|)和短路或(||)的区别总结
- Java 按位与(&)和短路与(&&)按位或(|)和短路或(||)的区别总结
- Java 按位与(&)和短路与(&&)按位或(|)和短路或(||)的区别总结
- 按位与、按位或
- 按位与按位或
- c# 按位与,按位或
- 关于按位与 &和按位或 | 的程序
- Java中的按位与(&)、按位或(|)、异或(^)等运算符
- 位运算符(&【按位与】,|【按位或】,^按位异或,~【按位取反】,<<【向左移动】,>>【向右移动】)
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- 安装 mysql workbench
- 好长时间没写解题报告了,这次来两道水题:超级书架1099 和 超级书架2 1100 TYVJ
- OGRE 3D 程序设计 Ogre 材质1 转
- string和byte[]的转换 (C#)
- 使用C#将C/C++,C#枚举导出成as3格式
- 采用按位与(&)按位或(|)进行权限检查的简单例子
- SSE Level 2 Vendor Interface Specification(FAST)-2章-Daily Procedure
- keybd_event,mouse_event 模拟产生键盘事件、鼠标事件的使用
- MyEclipse8.5安装插件步骤
- C#检测网络的连接状态
- 后台运行python程序 遇到缓冲区问题
- difference between VARCHAR NVARCHAR in SQLite
- android资源国际化
- net logon服务无法启动