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

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

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

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

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

下面我们看一下代码实现:

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;
            }
        }
    }
}

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

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

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


实例源代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值