• 权限设置


    一,数据库准备

    造三个表,用户登录信息表,权限代号名称表,用户对应权限表

    二,窗体准备

    1,分别做三个窗体,登录窗体,主窗体和权限修改窗体

    2,登录窗体点击登录时要返回dialogresult

    namespace WindowsFormsApplication1
    {
        public partial class login : Form
        {
            public login()
            {
                InitializeComponent();
            }
           
    
            public string Username
            {
    
                get { return txtuid.Text; }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                string uid = txtuid.Text;
                string pwd = txtpwd.Text;
                UserssData ud = new UserssDA().Select(uid);
                if (ud!=null)
                {
                    lbluid.Text = "";
                    if (pwd==ud.Password)
                    {
     
                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                    else
                    {
                        lblpwd.Text = "密码入错误!";
                    }
                }
                else
                {
                    lbluid.Text = "用户名输入错误!";
    
                }
    
    
    
            }
        }
    }

    3,在program主函数里,先用showdialog运行登录窗体,当返回ok的时候运行主窗体,并取出登录窗体的用户名传给主窗体

    Form2 f = new Form2();

    if (f.ShowDialog() == DialogResult.OK)
    {
    string uid = f.UserName;
    Application.Run(new MainForm(uid));
    }

    4,在主窗体中设置权限可用不可用

    (1)用菜单显示权限,在menuStrip1.Items中,每一项显示的菜单都是一个ToolStripMenuItem,遍历其下拉菜单.DropDownItems中的每一项(也是ToolStripMenuItem)

    如果该菜单的Tag值(需事先在每项菜单的属性里设置好Tag值)与从数据库中用户对应权限表查出来的数据的权限代号相同,则设置其为可用(需事先定义一个bool型的变量设置其初始值为false,然后设置菜单项的Enabled属性等于该变量)

    (2)用按钮显示权限,动态加按钮

    显示按钮的可用性:遍历容器中的所有控件,如果该控件是按钮则把它强转成按钮,如果该按钮的Tag值与从数据库中用户对应权限表查出来的数据的权限代号相同,则设置其为可用(需事先定义一个bool型的变量设置其初始值为false,然后设置菜单项的Enabled属性等于该变量)

    namespace WindowsFormsApplication1
    {
        public partial class MainForm : Form
        {
            private string _UserName;
            public MainForm()
            {
                InitializeComponent();
            }
            public MainForm(string userName):this()
            {
                _UserName = userName;
            }
            //从数据库中加加按钮:
            private void FillModuleButtons()
            {
                List<ModuleData> list = new ModuleDA().Select();
    
                foreach (ModuleData data in list)
                {
                    Button btn = new Button();
                    btn.Text = data.Name;
                    btn.Tag = data.Code;
                    btn.Height = 80;
                    btn.Width=80;
                    pnlTools.Controls.Add(btn);
                }
    
    
            }
    
            private void SetEnabled()
            {
                //查找人所具有的权限功能
                //1.获得登录人员的用户名 _UserName
                //2.查
                List<ModuleToUserData> list = new ModuleToUserDA().SelectByUserName(_UserName);
    
                //设置菜单是否可用
                foreach (ToolStripMenuItem mainitem in menuStrip1.Items)        //遍历主菜单项
                {
                    foreach (ToolStripMenuItem item in mainitem.DropDownItems)  //遍历每个主菜单的下拉项
                    {
                        bool has = false;
                        foreach (ModuleToUserData data in list)
                        {
                            if (item.Tag.ToString() == data.ModuleCode)
                            {
                                has = true;
                                break;
                            }
                        }
                        item.Enabled = has;
    
                    }
        
                }
    
                //设置按钮是否可用
                foreach (Control ctrl in pnlTools.Controls)
                {
                    if (ctrl is Button)
                    {
                        Button btn = ctrl as Button;
                        bool has = false;
                        foreach (ModuleToUserData data in list)
                        {
                            if (btn.Tag.ToString() == data.ModuleCode)
                            {
                                has = true;
                            }
                        }
    
                        btn.Enabled = has;
                    }
                }
            }
    
            private void MainForm_Load(object sender, EventArgs e)
            {
                FillModuleButtons();
                SetEnabled();
            }
        }
    }

    5,权限修改窗体制作

    (1)加载人员名称(用combobox盛放)和权限名称(用一个容器盛放,如pannel)

    (2)在加载权限时,采用动态添加复选框的形式,用foreach遍历从数据库中查出来的每条数据,在添加之前先判断复选框的tag值是否与权限的code值相等,如果相等则设置其

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //加载人员
            private void FillUsers()
            {
                List<UserData> list = new UserDA().Select();
    
                txtUsers.DataSource = list;
                txtUsers.DisplayMember = "NickName";
                txtUsers.ValueMember = "UserName";
            }
            ////加载功能
            private void FillModule()
            {
                //把人员代号取出来。
                string userName = (txtUsers.SelectedItem as UserData).Username;
    
                //根据人员人号查功能。
                List<ModuleToUserData> list = new ModuleToUserDA().SelectByUserName(userName);
    
                //把功能显示在界面上(checkbox)
                pnlModule.Controls.Clear();
                List<ModuleData> listAll = new ModuleDA().Select();//所有的功能
                foreach (ModuleData data in listAll)    //遍历所有的功能
                {
                    CheckBox cb = new CheckBox();
                    cb.Tag = data.Code;
                    cb.Text = data.Name;
    
                    foreach (ModuleToUserData item in list) //遍历这个人具有的功能
                    {
                        if (data.Code == item.ModuleCode)
                        {
                            cb.Checked = true;
                            break;
                        }
                    }
    
                    pnlModule.Controls.Add(cb);
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                FillUsers();
                FillModule();
            }
    
            private void txtUsers_SelectedIndexChanged(object sender, EventArgs e)
            {
                FillModule();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //把人员代号取出来
                string userName = (txtUsers.SelectedItem as UserData).Username;
    
                //把此人现有的对应功能全者删掉。
                ModuleToUserDA.DeleteByUserName(userName);
    
                //遍历功能,看看是否被选中了
                foreach (Control ctrl in pnlModule.Controls)
                {
                    if (ctrl is CheckBox)
                    {
                        CheckBox cb = ctrl as CheckBox;
                        if (cb.Checked == true)
                        {
                            string moduleCode = cb.Tag.ToString();
                            //把人员代号和功能代号一起插到数据库中
                            ModuleToUserData data = new ModuleToUserData();
                            data.ModuleCode = moduleCode;
                            data.UserName = userName;
                            ModuleToUserDA da = new ModuleToUserDA();
                            da.Insert(data);
                        }
                    }
                }
    
                MessageBox.Show("成功");
                
    
            }
    
            
        }
    }
  • 相关阅读:
    rtmp 之 amf
    Codeforces Round #601 (Div. 1)
    Codeforces Round #618 (Div. 1)
    Codeforces Round #694 (Div. 1) BCDE
    AtCoder Regular Contest 106 DEF
    AtCoder Grand Contest 006 BCDEFF
    JavaScript中深拷贝的实现方法
    suiidfadf
    macOs打开时提示:xxx.app已损坏修复教程
    vue通过事件对象获取标签上的属性值
  • 原文地址:https://www.cnblogs.com/William-1234/p/4525980.html
Copyright © 2020-2023  润新知