最近帮助朋友写了个小软件,涉及到不同用户的不同权限设计问题.因为看到很多朋友问如何在WinForm下做权限设置,所以将代码贴出来,供大家参考完善.这些代码的特点是设置与运用权限不必事先将菜单项手工存入数据库,系统会跟据主窗口菜单的变自化动保存菜单项到数据库中.
(1)取主窗体菜单项,依据不同用户以树形显示,并存入数据库,代码如下:
public partial class UserRightSet : Form
{
//临时表,用于加载选择的用户权限
User.UserRightDataTable userRightTempTable = new User.UserRightDataTable();
//当前选择的用户编号
Guid _CurrentUserId;
public UserRightSet()
{
InitializeComponent();
}
private void UserRightSet_Load(object sender, EventArgs e)
{
//加载用户表
this.userTableAdapter.Fill(this.user._User);
}
//填允用户权限树形列表
private void GetMenuStripItemName(ToolStripItemCollection items, TreeNodeCollection treeNodeCollection)
{
foreach (ToolStripItem item in items)
{
TreeNode tempTreeNode = new TreeNode(item.Text);
tempTreeNode.Checked = IsHaveRight(item.Text);
treeNodeCollection.Add(tempTreeNode);
if (item is System.Windows.Forms.ToolStripMenuItem)
{
this.GetMenuStripItemName(((ToolStripMenuItem)item).DropDownItems, tempTreeNode.Nodes);
}
}
}
//得到用户权限
private bool IsHaveRight(string MenuText)
{
foreach (User.UserRightRow row in user.UserRight)
{
if (row.UserRightMenu == MenuText)
{
if (row.UserHaveRight == true)
{
return true;
}
else
{
return false;
}
}
}
return false;
}
private void buttonSave_Click(object sender, EventArgs e)
{
userRightTempTable.Clear();
GetTreeNode(treeView1.Nodes);
//删除用户权限表中的数据
foreach (DataRow dr in user.UserRight)
{
dr.Delete();
}
//合并用户权限临时表到用户权限表中,并更新数据保存
user.UserRight.Merge(userRightTempTable);
int i = userRightTableAdapter.Update(user.UserRight);
if (i >= 1)
{
MessageBox.Show("设置用户权限成功", "操作提示");
}
}
private void GetTreeNode(TreeNodeCollection treeNodes)
{
//对用户权限树进行循环,并加入到临时表中
foreach (TreeNode treenode in treeNodes)
{
if (treenode.Nodes.Count >= 1)
{
GetTreeNode(treenode.Nodes);
}
User.UserRightRow userRightRow = (User.UserRightRow) userRightTempTable.NewRow();
userRightRow.UserRightId = Guid.NewGuid();
userRightRow.UserId = _CurrentUserId;
userRightRow.UserRightMenu = treenode.Text;
userRightRow.UserHaveRight = treenode.Checked;
userRightTempTable.Rows.Add(userRightRow);
}
}
private void userDataGridView_SelectionChanged(object sender, EventArgs e)
{
//CurrentUserId =
//显示当前用户
if (userDataGridView.SelectedRows.Count >= 1)
{
_CurrentUserId =(Guid) userDataGridView.SelectedRows[0].Cells["UserId"].Value;
this.userRightTableAdapter.Fill(user.UserRight, _CurrentUserId);
treeView1.Nodes.Clear();
MenuStrip menuStrip = this.Owner.MainMenuStrip;
GetMenuStripItemName(menuStrip.Items, treeView1.Nodes);
}
}
private void buttonExit_Click(object sender, EventArgs e)
{
this.Close();
}
}
(2)主窗体中依据用户不同,Enable或者disable菜单项
private void Main_Load(object sender, EventArgs e)
{
UserManage.UserLogin userLogin = new Loadometer.UserManage.UserLogin();
userLogin.ShowDialog();
UserManage.SetUserMenu.SetUserMenuRight(this.menuStrip1, UserManage.LoginedUserInfo.UserId);
}
/// <summary>
/// 依据用户权限设置用户菜单
/// </summary>
static class SetUserMenu
{
private static UserTableAdapters.UserRightTableAdapter _UserRightTableAdapter = new Loadometer.UserManage.UserTableAdapters.UserRightTableAdapter();
private static User.UserRightDataTable _UserRightDataTable = new User.UserRightDataTable();
public static void SetUserMenuRight(MenuStrip menuStrip,Guid UserId)
{
_UserRightTableAdapter.Fill(_UserRightDataTable, UserId);
GetMenuStripItemName(menuStrip.Items);
}
//递归每个菜单项
static private void GetMenuStripItemName(ToolStripItemCollection items)
{
foreach (ToolStripItem item in items)
{
if (item is System.Windows.Forms.ToolStripMenuItem)
{
GetMenuStripItemName(((ToolStripMenuItem)item).DropDownItems);
}
item.Enabled = IsHaveRight(item.Text);
}
}
//得到用户权限
static private bool IsHaveRight(string MenuText)
{
foreach (User.UserRightRow row in _UserRightDataTable)
{
if (row.UserRightMenu == MenuText)
{
if (row.UserHaveRight == true)
{
return true;
}
else
{
return false;
}
}
}
return false;
}
}
分享到:
相关推荐
总结来说,“winform通用权限开发框架示例”涵盖了权限管理的各个方面,结合C#的强大特性和WinForm的用户界面设计,提供了一种高效、灵活的解决方案。开发者可以通过学习和使用这个示例,快速构建自己的权限管理体系...
5. **角色与权限设计**:在设计阶段,需要明确角色与权限的关系。例如,可以创建“管理员”、“普通员工”等角色,并分配不同的权限集。权限可以细分为操作权限(如添加、删除、编辑)和数据权限(如查看特定部门的...
### C# WinForm界面特效设计源码解析 #### 一、概述 ...无论是简单的菜单设计还是复杂的窗体特效,都能够在实际项目中发挥重要作用。希望本文能够为从事C# WinForm开发的人员提供有价值的参考和启发。
【医疗保险系统简单Winform界面】是一个基础的桌面应用程序,它为医疗保险管理提供了一个直观的交互平台。这个系统设计的核心目标是方便用户录入和查询人员的保险信息,为后续的系统扩展打下了基础。以下是该系统的...
【C# WinForm界面开发大全】这篇文章主要涵盖了在C# WinForm开发中常见的三个关键模块:数据字典模块、参数配置模块和权限管理模块。这三个模块对于构建高效、灵活且易于维护的桌面应用程序至关重要。 1. 数据字典...
该系统是一个简单实用的二次开发框架,内置了完整的权限架构,包括菜单、角色、用户、字典、日志和代码生成等系统常规模块。该框架旨在帮助一般管理系统避免重复造轮子,开发者只需关注新增功能的form界面和业务逻辑...
【员工管理系统源码C#Winform+ACCESS...这个项目虽功能简单,但足以帮助初学者建立起C# Winform应用程序开发的基础,并掌握数据库操作的基本技巧。通过深入学习和实践,可以逐步提升到更复杂的企业级应用开发水平。
在仓库管理系统中,Winform用于设计直观的图形用户界面,如数据输入表单、查询窗口和报告展示等。 3. **数据库管理**:仓库管理系统通常需要与数据库进行交互,存储和检索库存信息。常见的数据库选择有SQL Server、...
【winform影院售票系统】是一个基于Windows Forms(winform)平台开发的简单售票管理系统,主要应用于学习和理解C#编程语言以及相关GUI设计技术。这个系统可以作为一个基础项目,帮助初学者了解如何在实际场景中应用...
总结一下,这个“考试系统示例WinForm版”是一个教学资源,展示了如何用C#和WinForm构建一个简单的考试系统界面,而不涉及数据存储。学习这个示例可以提升开发者在Windows应用开发、UI设计和事件驱动编程方面的技能...
8. **设计模式**:虽然这是一个简单的应用,但依然可以遵循一定的设计原则,比如MVC(Model-View-Controller)模式,分离业务逻辑和界面展示。 通过学习和分析这个Winform记事本项目,开发者不仅可以掌握Winform的...
【C# Winform录屏Demo】是一个基于C#编程语言和Windows Forms(Winform)框架开发的简单示例应用,其主要功能是实现屏幕录制。这个小型程序允许用户通过在屏幕上选择一个特定区域,然后对选定区域进行视频录制。用户...
【C# WinForm简单文本搜索器】是一种基于C#编程语言和Windows Forms(WinForm)框架开发的应用程序,主要用于在指定目录及其子目录下搜索文本文件,并定位关键词出现的位置。这款工具对于初学者来说,是一个很好的...
【C# WinForm 酒店管理系统项目源码】是一个基于C#编程语言和Windows Forms(WinForm)界面设计的软件开发项目。这个系统的主要目的是为酒店提供一套完整的管理工具,帮助管理员进行日常运营,包括用户管理、房客...
6. **UI设计**:虽然描述中提到程序“稍微有点简单”,但良好的UI设计仍然很重要。这包括合理布局、颜色搭配、字体选择等,以提供良好的用户体验。开发者可以利用Visual Studio的设计工具进行布局设计,并应用样式来...
总结,C# Winform 技师排钟是一个综合运用了C#编程、Winform界面设计、SQL Server数据库管理和事件驱动编程的软件实例,它展示了如何通过这些技术解决实际的业务问题,提高服务行业的运营效率。
在C#编程中,Windows Forms(Winform)是一种常用...同时,结合权限设计、架构设计和MVC模式,可以提高控件的适应性和可维护性。通过持续学习和实践,我们可以不断优化和扩展这些自定义控件,以满足更复杂的项目需求。
这样,你就可以构建一个简单的WinForm界面,允许用户交互地操作XML数据。 总结,C#的WinForm应用程序结合XML提供了一种直观且功能强大的方式来处理结构化数据。理解如何使用`XmlDocument`类及其相关方法是关键,这...
本文将深入探讨一款名为"WinForm餐厅点餐客户端"的应用程序,该程序基于.NET框架,采用三层架构设计,旨在提高餐厅的运营效率和服务质量。 首先,让我们了解一下WinForm。WinForm是.NET Framework提供的一种用于...
提供的源码可能包含了一个简单的WinForm项目,其中包括了上述的UI设计和事件处理逻辑。在实际开发中,你可能需要进一步完善错误处理、进度显示等功能,或者将这些功能封装成服务以便复用。 5. **注意事项** - ...