• C/S应用程序权限设计(1)


    最近这两天对前两年设计的权限模块进行了重构,主要解决在进行权限配置很烦琐的问题!

    对于大多数应用系统来说,都是使用了一个单独的功能来管理当前系统的用户权限.这样做本身没有什么问题,但是当模块比较多,权限比较多,同时系统功能增加比较多时,会发现进行用户授权是一件很麻烦的事.为什么不在我访问某一个窗口时,就可以进行用户授权呢,就像Windows下的文件夹权限管理一样.

    如果你的系统里所有的窗体还是从System.Windows.Forms.Form继承的,那你需要进行重构了.首先创建一个基本类窗体,命名为FormBase.主要实现以下几个功能:

    1. 显示一个统计设置权限的菜单.
    2. 获取当前窗体,窗体中控件,窗体中实体对象的权限定义

    http://www.cnblogs.com/zqonline/archive/2009/02/19/1393797.html

    是如何把一个自定义菜单添加到系统菜单的代码,从网上转载的.

    关于一个窗体的权限,可以分为访问和操作两种权限.

      当前用户没有权限访问此窗体

      当前用户有没有权限操作此窗体中的对象

    可以通过反射技术获取窗体里的字段和属性,在根据窗体里的字段和属性获取对象,判断是否是一个有权限控制的对象,这样就避免在接下来的系统开发中,还要考虑是否把对象加入到权限控制.当然反射有比较大的性能损失,不过谁有事无事,就天天用权限设置呢.

     '先清除,已存在的对象
                Me.PurviewObjectList.Clear()

                
    '添加窗体自身
                Me.AddPurviewObject(Me)

                
    '获取自定义权限列表
                Me.PurviewObjectList.AddRange(Me.CustomPurviewObjectList)

                
    '反射获取所有的字段
                For Each f As System.Reflection.FieldInfo In Me.GetType.GetFields(Reflection.BindingFlags.NonPublic _
                                                                        
    Or Reflection.BindingFlags.Public _
                                                                        
    Or Reflection.BindingFlags.Instance)
                    
    '判断是否是权限实体
                    Dim obj As Object = f.GetValue(Me)
                    
    If TypeOf obj Is Lily.ComponentFramework.PermissionBase Then
                        
    Me.AddPurviewObject(obj)
                    
    End If

                
    Next

                
    '反射获取所有的属性
                For Each p As System.Reflection.PropertyInfo In Me.GetType.GetProperties(Reflection.BindingFlags.NonPublic _
                                                                        
    Or Reflection.BindingFlags.Public _
                                                                        
    Or Reflection.BindingFlags.Instance)
                    
    '判断是否是权限实体
                    If p.CanRead Then
                        
    Dim obj As Object = p.GetValue(MeNothing)
                        
    If TypeOf obj Is Lily.ComponentFramework.PermissionBase Then
                            
    Me.AddPurviewObject(obj)
                        
    End If
                    
    End If
                
    Next

                
    '获取LilyControlBase控件的权限对象
                GetControlPurviewObjectList()

                
    Dim sb As New System.Text.StringBuilder
                
    For Each obj As Object In Me.PurviewObjectList
                    
    If sb.Length > 0 Then
                        sb.Append(vbCrLf)
                    
    End If
                    sb.Append(obj.ToString)
                
    Next

               '调用权限设置方法
                
    Dim objs As Object() = {Me.PurviewObjectList}
                Lily.ComponentFramework.ComponentManager.InvokeSingleMehod(
    "PurviewInfo"Nothing, objs)

    通过以下代码,就获取当前窗体所有的对象,当然从上面的代码,看出在写代码时,需要权限控制的对象只需要声明一个成员变量或创建一个属性即可.是不是比较简单呢.

    待续

  • 相关阅读:
    JavaScript 将数组中具有相同值的对象 取出组成新的数组
    css样式初始化
    javaScript如何跳出多重循环break、continue
    vue-cli中webpack配置解析
    Invalid prop: type check failed for prop "XXX". Expected String, got Object.
    vue-cli构建项目添加网站ico的logo
    vue-cli构建的vue项目打包后css引入的背景图路径不对的问题
    从零开始使用vue-cli搭建一个vue项目及注意事项
    安装npm及cnpm(Windows)
    面试题8:旋转数组中的最小数字
  • 原文地址:https://www.cnblogs.com/zqonline/p/1394594.html
Copyright © 2020-2023  润新知