最近,做了些关于权限的功能模块。平时,很少用到按位或(|)按位与(&)这样的符号,尤其是连用的情况。
今天就针对这种情况做了个简单的例子,希望能帮助初接触这类符号的人。
先看例子的界面,然后针对界面我再进行实例功能的简单介绍。
左侧是我定义的几个简单的权限项,右侧是定义的用户具有的权限项。左右按钮是用来对用户当前的权限进行添加删除操作的。下方的测试是用来检测我们给用户添加的权限是否正确。(如下图)
下面我们看一下代码实现:
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;
}
}
}
}
在最顶端,我们定义了权限项枚举类。
在对用户权限进行添加、删除操作时,我们使用了按位或(|)算法。
在验证用户是否具有指定权限时,我们使用了按位与(&)算法。