Bit mask来标识权限功能是非常简单和有用。

比如我们有听, 说, 读 ,书,写个权限,其中

听=0x0001

 

说=0x0010

 

读=0x0100

写=0x1000

1. 某人拥有听说权限, 那么他的仅限值应该是

0x0001 | 0x0010 = 0x0011.

2 判断0x0011是否有听权限

 0x0011 & 0x0001 = 0x0001 因此有权限。

3. 判断0x0011是否有写权限

 

 0x0011 & 0x1000 = 0x0000 因此无权限。

为此我特意封装了一个类来处理, 权限用枚举来列举。

下面是示例代码:

 

 

 

 

    class Program
    {
        static void Main(string[] args)
        {

            权限帮助类 rmm = new 权限帮助类();
            rmm.Append(权限列表.听);
            rmm.Append(权限列表.说);
            Console.WriteLine(rmm.HasRight(权限列表.听));
            Console.WriteLine(rmm.HasRight(权限列表.写));
            Console.Read();
        }
    }
    public enum 权限列表
    {
        听 = 1,
        说,
        读,
        写,
    }

    public class 权限帮助类
    {
        public long Value = 0;
        public 权限帮助类()
        {
        }
        public 权限帮助类(long value)
        {
            Value = value;
        }
        public void Append(权限列表 rm)
        {
            if (!HasRight(rm))
            {
                Value += GetRightValue(rm);
            }
        }
     public void Remove(权限列表 rm)
        {
            if (HasRight(rm))
            {
                long cur = GetRightValue(rm);
                Value = Value ^ cur;
            }
        }

        long GetRightValue(权限列表 rm)
        {
            int ert = 1;
            long abd = ert << ((int)rm - 1);
            return abd;
        }
        public bool HasRight(权限列表 rm)
        {
            long cur = GetRightValue(rm);
            return (Value & cur) == cur;
        }
    }

 

 

 

 

 

 如果您有更好的意见,建议,欢迎一起讨论。

 

 


 

 

 

 

相关文章:

  • 2021-09-24
  • 2022-02-02
  • 2021-08-06
  • 2022-12-23
  • 2021-04-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-20
  • 2023-01-28
  • 2021-10-16
  • 2021-11-09
  • 2022-12-23
  • 2023-01-03
相关资源
相似解决方案