正在做的一个小系统中,由于权限比较简单,就分为简单的三层(管理员,超级用户,一般用户),每个权限允许进入的模块不同而已所以我想能不能创建一个权限类,在其中分别阐述三种权限的区别,然后在模块中通过引用这个权限类来完成用户的模块访问控制比如说先在Program.cs中声明一个全局变量:
        public static string M_str_right;//记录登录用户的权限
接着在登录模块记录下这个全局变量的值
                Program.M_str_right = textBox1.Text;
然后创建一个权限类Right.cs,内部定义admin(),superuser(),user()三个方法分别来允许管理员,超级用户,一般用户进入模块。接着在要限制权限的模块中声明一个Right.cs的对象来引用它来判断允许进入的人.这种想法能不能实现的?如果能的话能否给下三个方法的基本代码?我是新手别喷谢谢!

解决方案 »

  1.   

    一般基于角色控制(RBAC)的权限管理;  
    用户-角色-权限三种元素各自的继承组合策略
    角色表,模块表,角色模块表,用户表
    根据角色查询用户可操作模块
      

  2.   

      楼上的方法我知道,不过那样做的话有些杀鸡用牛刀的感觉了,毕竟我做的系统只要基本的三类权限控制而已,假如用RBAC的话可能单单做角色控制就要花一半的时间去了
      对于简单的权限控制,用权限类来控制访问的想法能否实现?
      

  3.   

    MS有提供权限控制吗?难道是SQL的权限控制?用那个的话可能整个系统都要重做了
    用类这种思想是不是不能实现的?
      

  4.   

    看了一下描述,感觉这个权限系统有些过于简单,不过既然需求如此也就无所谓了,大概的做法也就是这样:
    Right.cs
    public static bool isAdmin(string right)
    {
        return "admin" == right;
    }
    isSuperUser()和isUser()和这个类似
    然后应用中
    if(Right.isAdmin(right))
    {
        // 管理员内容
    }
    else if(Right.isSuperUser())
    {
        // 超级用户
    }
    else
        // 用户
      

  5.   

    楼上的方法是把权限的判断放在了模块中进行,这样就比较繁琐
      我的想法是把权限的判断放进创建的Right.cs类中,在模块中只要声明一个Right.cs的对象,引用下相应的方法
      比如有个模块form1需要admin权限进入,那我在主界面点击进入form1模块的按钮的click事件上添加代码
      private void ToolStripMenuItem_Click(object sender, EventArgs e)
      {
              Right bas = new Right();
             bas.isAdmin();
    //这样就判断是否权限足够进入模块
              Form1 frm = new Form1();
             frm.Show();
      }
    (当然,假如权限不足弹出个“权限不足”的提示)
      

  6.   

    区别不大,两种风格而已,按你的要求可以这样写
    public class Right
    {
        private readonly string right;
        public Right(string right)
        {
            this.right = right;
        }
        public bool isAdmin()
        {
            // 判断
        }
        public bool isSuperUser()
        {
            // 判断
        }
        public bool isUser()
        {
            // 判断
        }
    }
    不知我这理解对不对?
      

  7.   

    判断代码就看你怎么做了,比如说right里存的就是角色名子,写成这样就行了
      public bool isAdmin()
      {
        return "Admin" == right;
      }
      public bool isSuperUser()
      {
        return "SuperUser" == right;
      }
      public bool isUser()
      {
        return "User" == right;
      }