VS 2013 LightSwitch 入門教學 Part 5 - 如何使用用戶權限控制存取

各位夥伴們,

第一次聽到 LightSwitch 這個字眼? 它是什麼呢? 有時候我們想在 Visual Studio 中用工具拖拉點選,快速地 “拉" 出一個資料庫的應用程式,例如中小企業需要一個簡單的產品型錄管理應用、庫存管理、辦公室資產管理、甚至訂便當系統,這類簡單的辦公室應用大都只有基本的資料庫表格操作、以及表單及報表的應用,無需太多客製化空間或是系統整合、也不用寫程式碼,這時候就可以使用 Visual Studio LightSwitch 這個工具!(在以往可能是使用 Access 、甚至是更早期的 FoxPro 工具來設計資料庫應用,但這類的工具無法設計出 Web 版本、往往也侷限在單機操作或是 Client-Server 架構)

我們整理了一系列的 Visual Studio 2013 LightSwitch 入門文章,相信按圖學習操作,你馬上在 5 分鐘就可以 ”拉" 出一個簡單的資料庫應用!

如果你錯過了之前的文章,請參考 :

------------------------------------------------------------------------------------------------------------------------------

VS 2013 LightSwitch 入門 Part 5 - 如何使用用戶權限控制存取

在這篇文章中我想談談用戶權限,也被稱為存取控制。在大多數商務應用程式中,通常由於不同的職位功能或角色,我們需要限制系統中的用戶可以訪問哪些資源。例如,只有系統管理員可以向系統添加新用戶。應用程式中的某些數據可能是比較機密的,應被限制訪問,除非該用戶具有對該數據的權限。LightSwitch能輕鬆地定義用戶的權限,並提供項目和查詢機制,並允許你檢查這些權限。

關於如何設置用戶權限的影音教學,請參閱:How Do I: Set Up Security to Control User Access to Parts of a Visual Studio LightSwitch Application?

驗證和授權

LightSwitch應用程式需要兩塊訊息來確定哪些用戶具有系統的哪些權限。首先,系統需要驗證用戶是否可以訪問該應用程式。這稱為驗證。 換句話說:"證明你是誰"。LightSwitch中有兩個支持驗證的類型:WindowsForms。

Windows 驗證是指應用程式基於Windows憑據而信任該用戶。所以一旦用戶成功登錄到其Windows 桌面中,這些憑據將自動傳遞到LightSwitch 應用程式。Forms驗證意味著應用程式請求一個自己的用戶名和密碼,完全獨立於任何其它憑據。因此當你選擇使用Forms驗證時,將會有登錄畫面跳出,用戶每次訪問該應用程式時,就必須輸入用戶名和密碼。

一旦用戶完成身份驗證,應用程式可以透過查看他們的用戶權限來確定允許訪問系統的哪些部分。這被稱為授權。換句話說:"現在,我知道你是誰,這些是你在系統中可以做的"。

LightSwitch使用ASP.NET身份提供程序模型,因此您也可以結合自己的自定義身份提供程序。了解更多訊息請參閱Customizing LightSwitch User Management .

設置用戶權限

這一切都始於項目屬性中的Access Control(存取控制)標籤。要打開它,在解決方案資源管理器中的主項目下雙擊“Properties”節點。

 

然後,選擇Access Control(存取控制)標籤來指定您想使用的驗證類型,以及你想要定義的用戶權限。

 

默認情況下,應用程式不會啟用驗證,所以在這裡,你可以選擇你要使用的身份驗證類型。

使用Forms身份驗證意味著您需要將用戶名和加密的密碼存在LightSwitch 資料庫中。這種類型的身份驗證適用於基於 Internet 的應用程式,在那裡用戶不在同一網絡中,您需要支持除了Windows之外的其他作業系統。如果您正在佈署為移動用戶或ISP或Azure website or cloud service,那麼你將需要選擇 Forms auth。

如果你的所有用戶都在同一個網絡/域或工作組,就像在內部的業務線應用程式的情況下使用Windows身份驗證是適當的。這意味著,沒有密碼被存到你的LightSwitch應用程式中。相應地Windows登錄憑據被使用並自動傳遞給應用程式。在這種情況下,您也可以選擇是否要設置特定的用戶和角色,或已驗證身份的用戶是否可以訪問該應用程式。

 

對於Windows身份驗證有兩個最佳做法:

• 給管理應用程式的Windows用戶或動態目錄組特殊權限和角色。(如果你選擇Windows身份驗證,它將會一直在啟用狀態.)

•讓任何 Windows用戶訪問我的應用程式的不受保護的部分。

接下來您可以在代碼中定義用戶權限,以便訪問資源(接下來我們將透過一個範例說明)。如果您用LightSwitch佈署了該應用程式,SecurityAdministration權限就會幫您定義好。當您佈署應用程式時,LightSwitch將創建一個具有此權限的單個用戶,這將讓他們可以訪問所需的畫面來定義系統中其餘用戶和角色。然而,當你在debug時,LightSwitch不會讓您的帳戶登錄,因為每次構建和運行應用程式(F5)時,這將是非常冗長乏味的。所以你可以使用“Granted for debug(授予debug)”複選框來設置哪些權限集應該在debug session中打開/關閉。

注意:如果您已 enabled SharePoint in your LightSwitch application,那麼用戶的管理是由SharePoint處理的。您可以透過使用Application.User對象的屬性檢查當前用戶的SharePoint屬性文件訊息,包括他們的部件和角色。欲了解更多訊息,請參閱Using the Person Business Type

讓我們透過一個具體的例子來說明:在我們的通訊錄(聯絡人管理器)應用程式中實施一些我們已經建立的這一系列安全措施。

檢查用戶權限在地址簿中的應用

讓我們從選擇一個身份驗證方案開始。在這個例子中,我會選擇“Use forms authentication”,讓每個對應用程式有訪問權限的人都可以從任何外部網絡或互聯網上搜索並編輯聯絡人。但如果是要添加或刪除聯絡人,用戶將需要特殊權限才可以做到。

因此,我們需要創建兩個新的權限。您可以將權限命名為任何你想要的。你只能在code中看到名稱。當系統管理員設置了用戶和角色,他們會在螢幕上看到顯示名稱和描述。因此,添加兩個權限: CanAddContacts和CanDeleteContacts。

 

下一步,為這兩個權限取消勾選“Granted for debug”,這樣我們就可以測試他們是正常運行的。當你取消勾選它時,它就不會被授予此權限。這讓我們在debug時方便地測試權限的組合。現在我們已經擁有這些權限設置,我們需要在code中檢查它們。正如我所提到的,LightSwitch為你提供了方法機制,因此,當你需要各種自定義驗證和商務規則,包括存取控制時,你可以編寫code。

有關在LightSwitch中編寫代碼的更多訊息,請參閱庫中的Performing Data-Related Tasks by Using Code

有關編寫自定商務規則的詳細訊息,請參閱:Common Validation Rules in LightSwitch Business Applications

因此,為了執行安全性,我們需要編寫幾行code來檢查這些權限。LightSwitch提供關於項目和查詢的存取控制方法,並在server上執行,無論是什麼客戶端阻斷你的中間層,您的數據都可以受到保護。當你想限制查看(讀),插入(添加),編輯或刪除項目時,在數據設計器中打開該項目和下拉的“Write code”按鈕,並選擇適當的存取控制方法。

 

對於這種應用,選擇Contacts_CanDelete方法,這將打開code編輯器的方法存根。您只需要寫一行code(下面以粗體顯示),以檢查您設置的CanDeleteContacts權限:

VB:

Namespace LightSwitchApplication
 Public Class ApplicationDataService
 Private Sub Contacts_CanDelete( ByRef result As Boolean )
'Add this one line of code to verify the user has permission to delete contacts:
result = Me .Application.User.HasPermission(Permissions.CanDeleteContacts)
 End Sub  
 End Class  
End Namespace

C#: 

namespace LightSwitchApplication
{
 public partial class ApplicationDataService
{
 partial void Contacts_CanDelete( ref bool result)
{
//Add this one line of code to verify the user has permission to delete contacts:
result = this .Application.User.HasPermission(Permissions.CanDeleteContacts);
}
}
}

現在回到設計器上的“Write code”按鈕和選擇Contacts_CanInsert,然後同樣地編寫以下程式碼行(粗體)來檢查CanAddContacts許可。您的程式碼文件應該如下。

VB:

Namespace LightSwitchApplication
 Public Class ApplicationDataService
 Private Sub Contacts_CanDelete( ByRef result As Boolean )
'Add this one line of code to verify the user has permission to delete contacts:
result = Me .Application.User.HasPermission(Permissions.CanDeleteContacts)

 End Sub  
 Private Sub Contacts_CanInsert ( ByRef result As Boolean )
'Add this one line of code to verify the user has permission to add contacts:
result = Me .Application.User.HasPermission(Permissions.CanAddContacts)
 End Sub  
 End Class  
End Namespace

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Security.Server;
namespace LightSwitchApplication
{
 public partial class ApplicationDataService
{
 partial void Contacts_CanDelete( ref bool result)
{
//Add this one line of code to verify the user has permission to delete contacts:
result = this .Application.User.HasPermission(Permissions.CanDeleteContacts);
}
 partial void Contacts_CanInsert( ref bool result)
{
//Add this one line of code to verify the user has permission to delete contacts:
result = this .Application.User.HasPermission(Permissions.CanAddContacts);
}
}
}

        您可能會納悶為何是在是在項目中,而非視窗內檢查這些權限。從項目檢查權限可保證無論用戶正在使用什麼畫面,數據操作都是被保護。如果您需要實現應用程序中的用戶權限,您需要記住確保您的實體在服務器上。但是,若您需要根據用戶權限隱藏/禁用您在HTML的UI元素,這裡有幾個選項。請參閱:

· LightSwitch Tip: A Simple Way to Check User Permissions from the HTML Client

· Using LightSwitchServerApplicationContext and WebAPI to Get User Permissions

執行它!

現在,我們已經準備好測試應用程序,那麼請編譯並用F5運行。因為我們沒有為除錯過程授予CanAddContacts權限,如果您嘗試添加聯繫人並保存數據,將會顯示錯誤訊息。

 

如果回到您的項目屬性的訪問控制選項卡,您可以核對權限的組合,這樣您就可以在除錯時對它們進行測試。

用戶和角色畫面

為了在系統裡設置用戶,應用程序需要被部署一個管理控制台。當您的應用程序在第一次被部署時,LightSwitch中會要求你輸入管理員用戶名和密碼,它將部署到用戶表,並授予SecurityAdministration權限,該管理員就可以進入該系統的其他用戶。

欲了解更多信息,請參閱:How to Assign Users, Roles and Permissions to a LightSwitch HTML Mobile Client

小結

正如您所看到,在Visual Studio LightSwitch中定義並檢查用戶權限是一個簡單但重要的任務。訪問控制的要求在專業的商務應用中非常普遍,LightSwitch中提供了一個易於使用的框架,通過訪問控制機制,鎖定應用程序的所有部分。一旦您部署應用程序時,系統管理員可以開始設置用戶和角色來控制訪問應用程序的安全部分。

有關用戶權限和部署應用程序的更多訊息,請參閱LightSwitch Developer Center上的使用用戶權限和部署LightSwitch應用程序的主題。

在接下來的文章中,我們將看到使用一些JavaScript和CSS自定義的HTML客戶端。下次再見!

希望大家喜歡!

 [原文發表地址] Beginning LightSwitch in VS 2013 Part 5: May I? Controlling Access with User Permissions   作者:Beth Massi

延伸閱讀 -