采用按位与(&)按位或(|)进行权限检查的简单例子
最近,做了些关于权限的功能模块。平时,很少用到按位或(|)按位与(&)这样的符号,尤其是连用的情况。
今天就针对这种情况做了个简单的例子,希望能帮助初接触这类符号的人。
先看例子的界面,然后针对界面我再进行实例功能的简单介绍。
左侧是我定义的几个简单的权限项,右侧是定义的用户具有的权限项。左右按钮是用来对用户当前的权限进行添加删除操作的。下方的测试是用来检测我们给用户添加的权限是否正确。(如下图)
下面我们看一下代码实现:
————————————————
版权声明:本文为****博主「幸子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/xingzi190045431/article/details/7220002
https://blog.****.net/joycesunny/article/details/52497415 c# 按位与,按位或
使用位运算进行权限管理 https://blog.****.net/qq_42448476/article/details/90478481
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;
}
}
}
}