C#关于数据库中存储的用户权限类似 "普通员工,管理员" 如何在代码中读取分析权限

之前在看某些数据库的用户权限的表时,发现字段是这样类似这样存储的“  普通员工,管理员 ”,当时觉得他们是通过分割字符串来分析权限的。后来读到 Liam Wang  的 https://www.cnblogs.com/willick/p/csharp-enum-superior-tactics.html#4578088 这篇文章有所启发,发现可以在内部采取枚举类来实现。

首先,定义权限枚举类

  public enum Role
    {
        普通员工 = 1 << 0,
        操作员 = 1 << 1,
        经理 = 1 << 2,
管理员 = ~0 //~0表示最大int

}

然后读取和分析权限

   public class Man
    {
        public Role Role { get; set; }
    }
   private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Man man = new Man();
            string dbStr = "普通员工,操作员"; //假设已经从数据库中读到的权限数据
            man.Role = (Role)Enum.Parse(typeof(Role), dbStr);
            if (man.Role.HasFlag(Role.普通员工 | Role.操作员)==true)
            {
                  man.Role = man.Role &~ Role.操纵员;  //删除权限
            }
            else
            {
                man.Role = man.Role | Role.管理员;  //增加权限
            } }

如果想保存权限到数据库,则需要添加[Flags]特性

   [Flags]
    public enum Role
    {
        普通员工 = 1 << 0,
        操作员 = 1 << 1,
        经理 = 1 << 2,
        管理员 = ~0
    }

  private void btn_Save(object sender, RoutedEventArgs e)
        {
            Man man = new Man();
            man.Role = Role.操作员 | Role.经理;
            string msg = man.Role.ToString();  //msg="操作员, 经理"
        }

 

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 百度翻译

posted on 2020-05-15 15:05  鲁广广  阅读(577)  评论(0编辑  收藏  举报

导航