权限设置
一,数据库准备
造三个表,用户登录信息表,权限代号名称表,用户对应权限表
二,窗体准备
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("成功"); } } }