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

最近,做了些关于权限的功能模块。平时,很少用到按位或(|)按位与(&)这样的符号,尤其是连用的情况。

今天就针对这种情况做了个简单的例子,希望能帮助初接触这类符号的人。

先看例子的界面,然后针对界面我再进行实例功能的简单介绍。

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

左侧是我定义的几个简单的权限项,右侧是定义的用户具有的权限项。左右按钮是用来对用户当前的权限进行添加删除操作的。下方的测试是用来检测我们给用户添加的权限是否正确。(如下图)

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

下面我们看一下代码实现:
————————————————
版权声明:本文为****博主「幸子」的原创文章,遵循 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;
            }
        }
    }
}