我想做个用户登录,让有权限的用户才可以访问某些窗体,否则拒绝访问。权限表:“
比如有张表 userlist 字段5个 
userid: 1
uid: admin
pwd:admin
quxian1: 1
quxian2: 00无权访问,1可以访问。quxian1:form1的访问权、quxian2:form2的访问权。对应4个窗体 frame_main ,login,form1,form2
frame_main是程序入口窗体,form1、form2是要控制访问的窗体,login是登录窗体。我在frame_main中定义4个公共变量 public static string puid,ppwd,pqx1,pqx2
然后怎么做呢?login上一个按钮:b_login 登录。两个文本框:t_uid,t_pwd 接下来怎么做呢?是不是,b_login_click 时查找userlist表字段uid、pwd和t_uid,t_pwd 的内容。如果有将表中的 5个字段内容放入公共变量?
然后在FORM1、FORM2中应该怎么做?怎么判断允许访问否,不允许访问怎么办?

解决方案 »

  1.   

    正常来讲 如果没有访问FORM1的权限,菜单项里不可见就行了  
      

  2.   

    1.用户实体类
    2.通过用户名和密码查询用户信息(返回用户实例)
    3.frame_main中定义一个公共变量 private 用户实体类 _user;
    4.在b_login_click中,通过2中的方法获取当前登陆用户的信息
    _user = BLL.GetUser(puid, ppwd);
    if(_user == null)
    {
        //登陆失败,用户名或密码错误!
         return;
    }
    else if(_user.qunxian == 1)
    {
        form1 frm1 = new form1();
        frm1.ShowDialog();
    }
    else
    {
        form2 frm2 = new form2();
        frm2.ShowDialog();
    }
      

  3.   

    userid: 1
    uid: admin
    pwd:admin
    quxian1: 1
    quxian2: 0
    登录的第一个操作是判断用户名密码数据库中是否有并且是否正确,如果正确读取该用户的两个权限,根据两个权限字段判断跳转页面如果有将表中的 5个字段内容放入公共变量?
    公共?public string uid;(有必要么?lz要干嘛?)
    然后在FORM1、FORM2中应该怎么做?怎么判断允许访问否,不允许访问怎么办?
    lz想怎么做就怎么做了?
    允许访问才回跳转到FORM1、FORM2中,不允许就不让他跳转
    可以用session或者cookic在登陆的时候如果有权限保存该用户信息,在FORM1、FORM2中判断是否保存在session或者cookic中如果有就是正常操作了!
    string name = this.txtUser.Text.Trim();
                string sql = string.Format(" u_pass from useradmin where u_name='{0}'", name);
                string pass = config.Getname(sql);//查询取得密码
                if (!this.txtPass.Text.Trim().Equals(pass))
                {
                    //密码错误
                }
                else
                {
                    Session["curAdmin"] = name;
                    Response.Redirect("main.aspx");//跳转页面
                }
      

  4.   

    WINFORM 没session 有就不用这么麻烦了
      

  5.   

    现在用的菜单中是这种形式,想让 如果这个class main_park_fee load的时候,当变量qx1 = 0时,
    提车ToolStripMenuItem 这项不可见应该怎么写呢?  public partial class main_park_fee : Form
        {
            public main_park_fee()
            {
                InitializeComponent();
            }
    private void 提车ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                main_park_lee_panel.Controls.Clear();
                park_fee_out park_lee_out = new park_fee_out();
                park_lee_out.TopLevel = false;
                main_park_lee_panel.Controls.Add(park_lee_out);
                park_lee_out.Show();
            }        private void 设置数据库ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                main_park_lee_panel.Controls.Clear();
                msdb_setup oldset = new msdb_setup();
                oldset.TopLevel = false;
                main_park_lee_panel.Controls.Add(oldset);
                oldset.Show();
            }
    }
      

  6.   

    得,要是不会用实体类
    还是操作字段吧,那也只需要返回quxian字段吧(quxian1: 1 quxian2: 0用一个字段表示不就够了?)
    string quxian =  BLL.GetUserRight(puid, ppwd); //返回权限字段并判断
    if(quxian == null)
    {
        //登陆失败,用户名或密码错误!
         return;
    }
    else if(qunxian == "1")
    {
        form1 frm1 = new form1();
        frm1.ShowDialog();
    }
    else
    {
        form2 frm2 = new form2();
        frm2.ShowDialog();
    }