利用 BasePage 实作窗体权限控管

摘要
若窗体(页面)具有「执行、新增、修改、删除」等操作权限控管,可以使用列举来描述使用者在该窗体的权限,详细的作法可以参考下面的「Enum 的设计与应用 - 简易权限设计」这篇文章。在此我们将利用这种列举的方式来描述窗体权限,并由 BasePage 来处理窗体权限的控管。

程序说明及实作
首先定义 EFormActions 列举,来描述窗体操作权限。

     ''' <summary>
    
''' 窗体操作权限列举。
    
''' </summary>

     < Flags() >  _
    
Public   Enum EFormActions
        
''' <summary>
        
''' 无。
        
''' </summary>

        None = 0
        
''' <summary>
        
''' 执行。
        
''' </summary>

        Execute = 1
        
''' <summary>
        
''' 新增。
        
''' </summary>

        Add = 2
        
''' <summary>
        
''' 修改。
        
''' </summary>

        Update = 4
        
''' <summary>
        
''' 删除。
        
''' </summary>

        Delete = 8
        
''' <summary>
        
''' 全部。
        
''' </summary>

        All = Execute Or Add Or Update Or Delete
    
End Enum


新增一个 TBActionPage 类别,继承至 System.Web.UI.Page 或自订的底层 BaseForm,做为权限控管的 BaseForm。首先新增一个 UserActions 属性,来描述使用者的窗体操作权限,在 OnInitComplete 方法中,第一次加载此窗体时取得使用者的窗体权限,即设定 UserActions 属性,此属性会储存至 ViewState 中,使下次页面 PostBack 时无需再重新取得窗体权限。另外新增 CheckUserActions 方法,供检查使用者是否具有指定的窗体操作权限。

Public   Class TBActionPage
    
Inherits System.Web.UI.Page
    
''' <summary>
    
''' 使用者权限。
    
''' </summary>

    Private FUserActions As EFormActions = EFormActions.None

ViewState 状态管理

    
''' <summary>
    
''' 覆写。引发 InitComplete 事件。
    
''' </summary>

    Protected Overrides Sub OnInitComplete(ByVal e As System.EventArgs)
        
If Not Me.IsPostBack Then
            
'取得使用者的窗体权限
            '测试用:设定使用者具「执行/新增/修改」权限,实际应呼叫中间层取得使用者的此窗体权限
            Me.UserActions = EFormActions.Execute Or EFormActions.Add Or EFormActions.Update

            
'第一次加载页面时检查执行权限
            If Me.UserActions = EFormActions.None Then
                
Throw New Exception("没有此窗体执行权限")
            
End If
        
End If

        
MyBase.OnInitComplete(e)
    
End Sub


    
''' <summary>
    
''' 使用者的窗体操作权限。
    
''' </summary>

    Public Property UserActions() As EFormActions
        
Get
            
Return FUserActions
        
End Get
        
Set(ByVal value As EFormActions)
            FUserActions 
= value
        
End Set
    
End Property


    
''' <summary>
    
''' 检查使用者是否具有指定的窗体操作权限。
    
''' </summary>
    
''' <param name="Actions">窗体操作权限</param>

    Public Function CheckUserActions(ByVal Actions As EFormActions) As Boolean
        
If (Me.UserActions And Actions) = Actions Then
            
Return True
        
Else
            
Return False
        
End If
    
End Function


End Class


测试程序
为测试使用,在上述的 TBActionPage 的 OnInitComplete 方法,直接设定具有「执行/新增/修改」权限;正确的作法应该是呼叫中间层传入该窗体的识别码来取得使用者在该窗体具有那些权限,并在此设定 UserActions 属性值。

Me .UserActions  =  EFormActions.Execute  Or  EFormActions.Add  Or  EFormActions.Update

新增一个测试页面,继承至 TBActionPage,当按下按钮时利用 CheckUserActions 使用者具那些权限并输出。

Imports  Bee.Web.WebCommon

Partial   Class _Default
    
Inherits Bee.Web.TBActionPage

    
Protected Sub Button1_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles Button1.Click
        
Me.Response.Write("執行 -> " & IIf(Me.CheckUserActions(EFormActions.Execute), "Y""N"))
        
Me.Response.Write("< br/ >")
        
Me.Response.Write("新增 -> " & IIf(Me.CheckUserActions(EFormActions.Add), "Y""N"))
        
Me.Response.Write("< br/ >")
        
Me.Response.Write("修改 -> " & IIf(Me.CheckUserActions(EFormActions.Update), "Y""N"))
        
Me.Response.Write("< br/ >")
        
Me.Response.Write("刪除 -> " & IIf(Me.CheckUserActions(EFormActions.Delete), "Y""N"))
    
End Sub

End Class


执行结果如下

利用 BasePage 实作窗体权限控管



 

你可能感兴趣的:(page)