热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单的WinForm权限设计

 简单的WinForm权限设计 收藏 一个简单的WinForm权限设计    最近帮助朋友写了个小软件,涉及到不同用户的不同权限设计问题.因为看到很多朋友问如何在WinForm下做权限设置&#xf

转载 简单的WinForm权限设计 收藏
一个简单的WinForm权限设计

   最近帮助朋友写了个小软件,涉及到不同用户的不同权限设计问题.因为看到很多朋友问如何在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);       
        }
       ///


    /// 依据用户权限设置用户菜单
    ///

    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;
        }
    }
 


推荐阅读
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 优化后的摘要:默认情况下,PopupWindow在点击外部区域时会自动关闭。为了实现点击外部区域时不自动关闭的功能,可以通过自定义设置来调整PopupWindow的行为,确保其在外部点击时仍保持显示状态。这需要对PopupWindow的属性进行适当的修改和配置,以满足特定的交互需求。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 配置php连接mysql,PHP连接
    本文目录一览:1、dw中php怎么连接mysql数据库 ... [详细]
  • 用FileStream,是没办法下载指定文件的,不管你怎么写,都是浪费力气,最后下载的是整个html页面,包括背景,按钮,查询框,图片,虽然还是xsl格式。而且关闭文档,会弹出是否保存当前修改,如果保 ... [详细]
author-avatar
羚之舞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有