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);
}
}
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;
}
}
{
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;
}
}
{
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;
}
}
如果您有更好的意见,建议,欢迎一起讨论。