zoukankan      html  css  js  c++  java
  • C/S应用程序权限设计(3)

    窗体访问权限的控制

    此类权限就比较好控制了,你有权限就可以打开窗体,没有权限就不能打开.由于系统中所有的窗体都是基于FormBase继承而来的,那就有了集中控制权限的基础.首先创建了一个属性类,只能作用于类上,代码如下:

    ''' -----------------------------------------------------------------------------
    ''' Project     : Lily.ComponentFramework
    ''' Class     : ComponentFramework.PermissionAttribute
    ''' 
    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' 类访问许可属性定义
    ''' </summary>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    '''     [zqonline]    2007-03-27    Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    <AttributeUsage(AttributeTargets.Class)> Public Class PermissionAttribute
        
    Inherits System.Attribute
        
    Private md_name As String = String.Empty
        
    Private md_guid As String = String.Empty
        
    Private md_description As String = String.Empty
        
    Public Sub New(ByVal name As StringByVal guid As StringByVal description As String)
            
    Me.md_name = name
            
    Me.md_guid = guid
            
    Me.md_description = description
        
    End Sub
        
    ''' -----------------------------------------------------------------------------
        
    ''' <summary>
        
    ''' 名称.
        
    ''' </summary>
        
    ''' <value></value>
        
    ''' <remarks>
        
    ''' </remarks>
        
    ''' <history>
        
    '''     [zqonline]    2006-12-25    Created
        
    ''' </history>
        
    ''' -----------------------------------------------------------------------------
        Public ReadOnly Property Name() As String
            
    Get
                
    Return Me.md_name
            
    End Get
        
    End Property
        
    ''' -----------------------------------------------------------------------------
        
    ''' <summary>
        
    ''' 唯一标识.
        
    ''' </summary>
        
    ''' <value></value>
        
    ''' <remarks>
        
    ''' </remarks>
        
    ''' <history>
        
    '''     [zqonline]    2006-12-25    Created
        
    ''' </history>
        
    ''' -----------------------------------------------------------------------------
        Public ReadOnly Property Guid() As String
            
    Get
                
    Return Me.md_guid
            
    End Get
        
    End Property
        
    ''' -----------------------------------------------------------------------------
        
    ''' <summary>
        
    ''' 返回描述.
        
    ''' </summary>
        
    ''' <value></value>
        
    ''' <remarks>
        
    ''' </remarks>
        
    ''' <history>
        
    '''     [zqonline]    2006-12-25    Created
        
    ''' </history>
        
    ''' -----------------------------------------------------------------------------
        Public ReadOnly Property Description() As String
            
    Get
                
    Return Me.md_description
            
    End Get
        
    End Property
    End Class

    其中最主要的就是guid,每一个窗体都对应一个guid,guid是可以唯一的,窗体的名称,确不可以.如果某一个窗体需要进行权限控制,只需把PermissionAttribute作用于窗体上即可!那什么时候,进行权限判断呢,在基类窗体FormBase有如下代码:

    实例化时进行权限判断

        Public Sub New()
            
    MyBase.New()

            
    '该调用是 Windows 窗体设计器所必需的。
            InitializeComponent()

            
    '在 InitializeComponent() 调用之后添加任何初始化
            If Not Me.IsLoad Then
                GC.SuppressFinalize(
    Me)
                
    Throw New PermissionException("当前用户没有进行此项操作的权限。")
            
    End If

        
    End Sub
       ''' -----------------------------------------------------------------------------
        
    ''' <summary>
        
    ''' 返回当前用户是否有权限加载.
        
    ''' </summary>
        
    ''' <returns></returns>
        
    ''' <remarks>
        
    ''' </remarks>
        
    ''' <history>
        
    '''     [zqonline]    2006-12-24    Created
        
    ''' </history>
        
    ''' -----------------------------------------------------------------------------
        Public Overridable Function IsLoad() As Boolean Implements IFormManager.IsLoad
            
    If Not Me.PermissionAttribute Is Nothing Then
                
    Return Lily.ComponentFramework.ComponentManager.Permission.Has(Me.PermissionAttribute)
            
    Else
                
    Return True
            
    End If
        
    End Function

    这个主要是判断当前窗体是否具有PermissionAttribute属性,如果没有,说明不需要进行权限控制

        Private md_pa As PermissionAttribute
        
    <Browsable(False)> Public ReadOnly Property PermissionAttribute() As PermissionAttribute
            
    Get
                
    If Me.md_pa Is Nothing Then
                    
    Dim objs As Object() = Me.GetType.GetCustomAttributes(GetType(Lily.ComponentFramework.PermissionAttribute), True)
                    
    If Not objs Is Nothing AndAlso objs.Length > 0 Then
                        
    Dim v As Lily.ComponentFramework.PermissionAttribute = CType(objs(0), Lily.ComponentFramework.PermissionAttribute)
                        
    If Not v.Name Is Nothing AndAlso v.Name.Length > 0 _
                                
    AndAlso Not v.Guid Is Nothing _
                                
    AndAlso v.Guid.Length > 0 Then
                            
    Me.md_pa = v
                        
    End If
                    
    End If
                
    End If
                
    Return Me.md_pa
            
    End Get
        
    End Property

    待续

  • 相关阅读:
    React 之form表单、select、textarea、checkbox使用
    React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
    React事件方法、React定义方法的几种方式、获取数据、改变数据、执行方法传值
    react综合案例-todolist、localstorage缓存数据
    【剑指offer15】二进制中1的个数(位运算),C++实现
    【剑指offer】10矩阵覆盖
    【剑指offer】09-3变态跳台阶
    【剑指offer】顺时针打印矩阵,C++实现
    【剑指offer】09-2跳台阶,C++实现
    leetcode1143
  • 原文地址:https://www.cnblogs.com/zqonline/p/1394625.html
Copyright © 2011-2022 走看看