采用按位与(&)按位或(|)进行权限检查的简单例子

来源:互联网 发布:淘宝开店装修免费模板 编辑:程序博客网 时间: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;            }        }    }}

在最顶端,我们定义了权限项枚举类。

在对用户权限进行添加、删除操作时,我们使用了按位或(|)算法。

在验证用户是否具有指定权限时,我们使用了按位与(&)算法。


实例源代码下载