评论

收藏

[C++] 把C语言中最简单有效的权限管理搬到C#里去

编程语言 编程语言 发布于:2021-07-02 15:58 | 阅读数:546 | 评论:0

  在日常的应用中,我们常常会遇到权限控制的问题,居然也有些人提出了全面的,依托数据库的权限方案,其字段及其相关联的程度,让人生畏,并且,速度也不会理想。 在C里,我们要控制一些复杂度不是很大的权限问题时,定义一个宏,一句话就实现了 我们把C里的这种思想搬过来,封装成C#类,试试看 :)
  原理: 控制一个整数的二进制的每一位,当它为1时,我们认为他拥有权限,当为0时,认为他无权限,就这么简单
注意:这不是什么创新 DSC0000.gif
  废话不多说,直接上代码 DSC0001.gif
DSC0002.gif public enum Permission
DSC0003.gif DSC0004.gif DSC0005.gif {
DSC0006.gif      新建 = 1,
     删除 = 2,
     修改 = 4,
    保留权限1 = 8,
    保留权限2 = 16,
    保留权限3 = 32,
    保留权限4 = 64,
    保留权限5 = 128
    
DSC0007.gif }
public class PSolution
{
DSC0008.gif DSC0009.gif     /**//// <summary>
    /// 原始权限
DSC00010.gif     /// </summary>
    int pNum;
    public int PNum
    {
        get { return pNum; }
        set { pNum = value; }
    }

    public PSolution(int a)
    {
        if (a < 0 || a > 255)
        {
            throw new ArgumentException("参数值必须大于0且小于255");
        }

        pNum = a;
    }

    /**//// <summary>
    /// 清除指定的权限
    /// </summary>
    public void cleanBit(Permission p)
    {
        pNum &= ~((int)p);
    }

    /**//// <summary>
    /// 设置指定的权限
    /// </summary>
    public void setBit(Permission p)
    {
        pNum |= ((int)p);
    }

    /**//// <summary>
    /// 检查是否拥有指定的权限
    /// </summary>
    public bool checkBit(Permission p)
    {
        int bTemp = pNum >> Convert.ToInt16(System.Math.Log((double)p,2d));
        if ((bTemp & 0x01) == 1)
            return true;

        return false;
    }
}


  
关注下面的标签,发现更多相似文章