Winform开发框架之权限管理系统

简介:

在前一篇随笔《Winform开发框架之字典数据管理》中介绍过我Winform开发框架的总体情况,其中最重要的思路就是把常用的模块封装成控件进行重复使用,一则可以避免重复开发,提高开发效率;二则可以使用成熟的控件及技术,使得用户体验更好,更加专业。在前面介绍过的Winfrom开发框架总体思路如下所示。

 在Winform框架中,其中权限管理系统、字典管理系统,都是可以做成独立的程序来使用,而且应该可以在程序中引用来查询或者获取相关的字典数据,如找某个键值的字典列表作为下拉列表,而且由于实际项目中,有的是SqlServer、有的是Access数据库的或者其他数据库,所以支持多数据库是最好的选择。 

本篇主要介绍经过优化完善的权限管理系统, 其既独立又具整合性的权限管理系统,既相互独立,有相互整合,方便重用,又不需重新开发,非常方便、更提高效率。 由于权限系统精简而又能满足日常绝大多数的需要,不会复杂的难于管理,而且也是基于角色的授权访问机制(RBAC),最重要是非常适合软件的整合使用。

权限管理系统作为一个独立的模块,其主要由登陆界面、权限管理主界面(管理用户、角色、机构、功能,以及控制角色的权限等操作功能,部分界面如下所示。 

 

 

给用户分配权限,首先是给相应角色授权,角色授权功能如下所示,可以编辑角色使用的功能,也可以管理该角色包含的用户,从而实现间接实现给用户分配权限的功能(这也是基于业界通用的基于角色的访问控制(RBAC)的控制法则)。

  

经过优化后的权限管理系统,界面及业务逻辑封装到一个类库中,我们开发的业务管理系统中集成就很简单了,主要的项目工程界面如下所示:

 

我编写了一个测试工程,用来模拟业务系统中调用权限管理模块的例子,界面如下所示:

 

相关的代码很简单,这也是利用权限管理系统后简化很多代码的根本所在:

         private void Form1_Load(object sender, EventArgs e)
        {
            
// 获取所有权限管理系统的用户,并在下拉列表中展示
            List < UserInfo >  userList  =  BLLFactory < User > .Instance.GetAll();
            
this .txtLogin.Items.Clear();
            
foreach  (UserInfo info  in  userList)
            {
                
this .txtLogin.Items.Add(info.Name);
            }
        }

        
private   void  btnSecurity_Click( object  sender, EventArgs e)
        {
            
// 独立启动权限管理系统,只需一行代码即可
            WHC.Security.UI.Portal.StartLogin();
        }

当然,如果要判断用户的登录及角色等,可以通过下面代码来实现

                         //判断用户是否登录成功
 
                string  identity  =  BLLFactory < User > .Instance.VerifyUser( this .txtLogin.Text,  this .txtPassword.Text, Guid.NewGuid().ToString());
                 if  ( ! string .IsNullOrEmpty(identity))
                {
                    
// 进一步判断用户角色
                     if  (BLLFactory < User > .Instance.UserInRole( this .txtLogin.Text,  " 管理员 " ))
                    {
                        MessageUtil.ShowTips(
string .Format( " 用户【{0}】身份验证正确 " this .txtLogin.Text));
                    }
                    
else
                    {
                        MessageUtil.ShowWarning(
" 该用户没有管理员权限 " );
                        
return ;
                    }
                }
                
else
                {
                    MessageUtil.ShowWarning(
" 用户名或密码错误 " );
                    
return ;
                }

权限控制的精髓就是,用户登录后,通过把用户拥有的权限获取出来,放到一个功能列表中,然后在每一个窗体中,根据用户的功能列表,显示或者屏蔽对应的功能即可,获取功能列表代码如下所示:

                   UserInfo info  =  userBLL.GetUserByName(loginName);

                    
#region  获取用户的功能列表

                    Function functionBLL 
=   new  Function();
                    List
< FunctionInfo >  list  =  functionBLL.GetFunctionsByUser(info.ID,  " WareMis " );
                    
if  (list  !=   null   &&  list.Count  >   0 )
                    {
                        
foreach  (FunctionInfo functionInfo  in  list)
                        {
                            
if  ( ! Portal.gc.FunctionDict.ContainsKey(functionInfo.ControlID))
                            {
                                Portal.gc.FunctionDict.Add(functionInfo.ControlID, functionInfo);
                            }
                        }
                    }
                    #endregion 

 判断的时候,放在一个函数,判断用户访问的功能是否在列表中即可,代码如下所示

        /// <summary> 
       
///  看用户是否具有某个功能
        
///   </summary>
        
///   <param name="controlID"></param>
        
///   <returns></returns>
         public   bool  HasFunction( string  controlID)
        {
            
bool  result  =   false ;
            
if  (FunctionDict.ContainsKey(controlID))
            {
                result 
=   true ;
            }

            
return  result;
        }

那么控制用户显示的界面代码如下所示:

              #region  KTV包间管理
            
if  (Portal.gc.HasFunction( " KTV " ))
            {
                OutlookBarBand myBasicBand 
=   new  OutlookBarBand( " KTV包间管理 " );
                myBasicBand.SmallImageList 
=   this .imageList;
                myBasicBand.LargeImageList 
=   this .imageList;
                
if  (Portal.gc.HasFunction( " KTV/View " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV包间状态视图 " 0 ));
                }
                
if  (Portal.gc.HasFunction( " KTV/Setting " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV包间设置 " 1 ));
                }
                
if  (Portal.gc.HasFunction( " KTV/Goods " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV商品设置 " 3 ));
                }
                
if  (Portal.gc.HasFunction( " KTV/Waiter " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV服务生管理 " 4 ));
                }
                
if  (Portal.gc.HasFunction( " KTV/BookIn " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV预订管理 " 5 ));
                }
                
if  (Portal.gc.HasFunction( " KTV/OtherIncome " ))
                {
                    myBasicBand.Items.Add(
new  OutlookBarItem( " KTV其他款项登记 " 6 ));
                }
                myBasicBand.Background 
=  SystemColors.AppWorkspace;
                myBasicBand.TextColor 
=  Color.White;
                outlookBar1.Bands.Add(myBasicBand);
            }
            
#endregion

   判断菜单或者功能按钮,也只需要判断某功能点是否在已有集合中即可,如下所示:

         /// <summary>
        
///  根据权限屏蔽功能
        
///  </summary>
         private  void InitAuthorizedUI()
        {
             this.tool_Report.Enabled = Portal.gc.HasFunction( " Report ");
             this.tool_Dict.Enabled= Portal.gc.HasFunction( " Dictionary ");
             this.tool_ItemDetail.Enabled = Portal.gc.HasFunction( " ItemDetail ");
             this.tool_Purchase.Enabled = Portal.gc.HasFunction( " Purchase ");
             this.tool_StockSearch.Enabled = Portal.gc.HasFunction( " StockSearch ");
             this.tool_TakeOut.Enabled = Portal.gc.HasFunction( " TakeOut ");

             this.menu_WareHouse.Enabled = Portal.gc.HasFunction( " WareHouse ");
             this.menu_Dictionary.Enabled = Portal.gc.HasFunction( " Dictionary ");
             this.menu_run_systemLog.Enabled = Portal.gc.HasFunction( " LoginLog ");
             this.menu_Parameters.Enabled = Portal.gc.HasFunction( " Parameters ");
             this.menu_MonthlyStatistic.Enabled = Portal.gc.HasFunction( " MonthlyStatistic ");
             this.menu_AnnualStatistic.Enabled = Portal.gc.HasFunction( " AnnualStatistic ");
             this.menu_ClearAll.Enabled = Portal.gc.HasFunction( " ClearAllData ");
             this.menu_ImportItemDetail.Enabled = Portal.gc.HasFunction( " ImportItemDetail ");
        }

至此,权限管理模块介绍已经完毕,下面给出一个调用例子Demo程序给大家参考学习,下载地址如下:

 http://files.cnblogs.com/wuhuacong/SecurityDemo.rar 

前一篇文件的字典组件模块调用例子Demo程序下载地址也一并提供下载,下载地址如下:

 http://files.cnblogs.com/wuhuacong/DictionaryDemo.rar

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之权限管理系统,如需转载请自行联系原博主。



目录
相关文章
|
1月前
|
Linux Shell 数据安全/隐私保护
第十一篇:系统管理体系之服务管理
第十一篇:系统管理体系之服务管理
|
4月前
|
安全 Java 数据安全/隐私保护
构建高效网站后台:权限管理系统设计与实现
【7月更文挑战第5天】在现代Web应用开发中,权限管理是后台系统不可或缺的一部分,它确保了系统的安全性与用户数据的隐私。良好的权限管理系统能够精细控制不同用户角色对功能模块及数据资源的访问权限,从而提升系统的灵活性和安全性。本文将深入探讨权限管理的基本概念、设计思路,并通过一个简单的代码示例展示如何在Web后台中实现基本的权限控制逻辑。
299 2
|
5月前
|
监控 安全 Java
老程序员分享:JeeSite快速开发平台、功能介绍、用户权限、数据权限、系统管理
老程序员分享:JeeSite快速开发平台、功能介绍、用户权限、数据权限、系统管理
175 0
|
存储 设计模式 缓存
权限管理系统,可以这么设计
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。对权限做管理的系统,就是权限管理系统。
|
数据安全/隐私保护
JSP+Servlet培训班作业管理系统[22]–番外篇之过滤器与权限管理
本文目录 1. 本章任务 2. 开发过滤器类 3. 过滤器拦截 4. 过滤器通过 5. 权限管理的实现
134 0
|
数据安全/隐私保护 开发框架 数据管理
|
存储 关系型数据库 数据库
下一篇
无影云桌面