No.1
使用者登入許可權在程式設計設計中是一個很重要的專案,實際意義在於實現分級管理。
也就是區分不同使用者可以執行的某些操作。
根本上就是一個階級的建立過程。
雖然,任何事任何時候都要講究平等,但實際上,有些平等只是一個相對概念,並不能完全實現。
如果一律平等,將會造成混亂,沒有規則,就失去了管理的能力。
No.2用一個表格來儲存使用者名稱,以及其對錶的操作許可權記錄。
具體效果可看下圖:
以上圖為初始化之後的表格記錄,"√"表示可以操作,"×"表示不允許操作。
設定許可權後效果如下圖:
No.3當然,設定這個表,並不是我們想要達到的目的。
我們的目的是以此表為依據,對登入後的使用者進行一個判斷,然後確認是否可以進行下一步表格操作。
為了實現這個目的,我們做了一些程式碼來進行處理。
如下圖所示:
當選擇某一個工作表的時候,會自動彈出一個對話方塊,這裡只做了使用者名稱判斷,也就是說,輸入一個使用者名稱,程式會自動判斷此使用者名稱是否可以對此表進行操作功能。
如果沒有自動退出,如果有便開啟表,進入操作。
在這個階段,有很多處理表的方法,如對錶進行隱藏,對錶進行表保護,等等。
本例,只做了限制顯示的功能。
下面看一些程式碼:
No.4檢測使用者的合法性函式:
Function CheckAdmin() As Boolean '檢測是否合法使用者 Dim S As Worksheet, cell As Range, Xcell As Range, ir As Integer Set S = ThisWorkbook.Worksheets("set") ir = S.UsedRange.Rows.Count Set cell = S.Range("A2:A" & ir) Dim adminName As String adminName = VBA.InputBox("輸入管理使用者名稱:", "使用者合法性檢測", "admin") If VBA.Len(adminName) = 0 Then S.Activate: Exit Function '查詢是否是合法使用者 Set Xcell = cell.Find(what:=adminName, LookIn:=xlValues, lookat:=xlWhole) If Not Xcell Is Nothing Then MsgBox Xcell.Value & vbCr & " 是合法使用者,可以使用!", vbInformation, "提示" CheckAdmin = True Else MsgBox adminName & vbCr & " 不是合法使用者,不能使用!", vbInformation, "提示" S.Activate CheckAdmin = False End IfEnd Function
CheckAdmin()函式返回一個布林值,True為合法使用者,False為非法使用者。
所謂合法使用者就是指已經註冊的使用者,非法就是沒有進行註冊登記的使用者。
上面程式碼檢測了使用者是否存在,下面程式碼檢測使用者是否具有對錶操作的許可權,這個是整個許可權管理的核心,仔細看下其判斷邏輯。
檢測表是否可以操作函式:
Function CheckAdminSheets(ActiveSheetName As String, S As Worksheet, xcell As Range) As Boolean '檢測表是否可以操作 Dim Ccell As Range, Cr As Range, Ci As Integer Ci = S.Cells(1, S.Cells.Columns.Count).End(xlToLeft).Column Set Ccell = S.Range(S.Cells(1, 2), S.Cells(1, Ci)) Set Cr = Ccell.Find(what:=ActiveSheetName, LookIn:=xlValues, lookat:=xlWhole) If Cr Is Nothing Then CheckAdminSheets = False ElseIf Not Cr Is Nothing Then If S.Cells(xcell.Row, Cr.Column).Value = 0 Then CheckAdminSheets = True ElseIf S.Cells(xcell.Row, Cr.Column).Value = -1 Then CheckAdminSheets = False End If End IfEnd Function
使用者許可權管理,基本思路就是這樣,希望這樣的功能對有需求的朋友,有所借鑑。
嚴格來說,這樣的使用者登入管理方式,並不嚴謹。
只作為一種實現思路來進行說明,實際應用中,可能會遇到更加複雜的問題。
不做深入研究了。