权限设置

一,数据库准备

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

二,窗体准备

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("成功");
            

        }

        
    }
}
原文地址:https://www.cnblogs.com/William-1234/p/4525980.html