共用方式為


如何:在 HTML 用戶端應用程式中啟用驗證

您可以使用 LightSwitch 來防止未經授權的使用者讀取、變更或刪除資料,讓 HTML 用戶端應用程式變得更加安全。 如果您實作驗證,使用者就必須證明其身分識別,才能存取應用程式。

注意事項注意事項

設定權限的流程與 Silverlight 用戶端不同 – 請參閱 如何:在 Silverlight 用戶端應用程式中啟用驗證。已針對 SharePoint 啟用的 LightSwitch 應用程式使用 SharePoint 驗證進行存取控制。

如果您有許多使用者,也可以建立數個對特定螢幕和資料具有不同存取層級的使用者角色,然後再為每位使用者指派適當的角色,就能更輕鬆地管理存取。 例如,薪資應用程式可以允許員工檢視其薪資資訊,但不得加以變更。 然而,卻可以賦予薪資主管人員檢視和變更員工資訊的權限。 員工將被指派「員工」角色,而主管人員則被指派為「主管」角色。

您也可以在 Active Directory 安全性群組中加入使用者,然後指派權限給這些群組,就能更輕鬆地管理權限。 由於成員資格和權限是可以繼承的,所以只需要進行單一變更,就可以針對某一群組和其所有子群組來授與或拒絕權限。 例如,您可以將 Bob 加入至 Active Directory 中的 Sales 群組。 如果 Sales 是 Marketing 的子群組,任何您授與 Marketing 的權限也會授與給 Bob。

您可以撰寫 Visual Basic or C# 程式碼在伺服器上實作驗證和授權。若要在螢幕層級上實作,您必須在伺服器上加入查詢,使 HTML 畫面以這些查詢為基礎,然後撰寫 JavaScript 程式碼以根據權限啟用或停用螢幕。 您也需要加入 Silverlight 用戶端以管理使用者和角色。 Silverlight 架構的 [使用者] 和 [角色] 畫面可供指定為 [應用程式系統管理員] 的人員在發行期間使用。

驗證

保護應用程式安全的第一個步驟是啟用驗證。 您可以使用表單驗證或 Windows 驗證。 表單驗證是由應用程式本身進行管理,而使用者必須提供使用者名稱和密碼才能存取應用程式。 在 Windows 驗證中,會使用登入執行應用程式的電腦時所用的認證來驗證應用程式使用者,並不需要其他的使用者名稱或密碼。 在這兩種情況下,應用程式系統管理員都會維護獲得授權的使用者清單。在表單驗證中,系統管理員還會維護加密密碼。

若要啟用驗證

  1. 在 [方案總管] 中,開啟 [屬性] 節點的捷徑功能表,然後選擇 [開啟]。

  2. 在 [應用程式設計工具] 中,選擇 [存取控制] 索引標籤。

  3. 在 [選取要使用的驗證類型:] 清單中,選擇 [使用 Windows 驗證] 或 [使用表單驗證]。

    如果您選擇 [使用 Windows 驗證],請選擇 [僅允許您應用程式之使用者螢幕中指定的使用者] 選項按鈕或 [允許任何通過驗證的 Windows 使用者] 選項按鈕。

    應用程式現在會要求使用者提供認證以存取該應用程式。

權限

保護 HTML 用戶端安全的下一個步驟是建立權限。 首先,在 [應用程式設計工具] 中定義權限物件。 然後您就可以在程式碼的其中一個 Can 方法 (例如 <Entity>CanUpdate) 內參考該物件。 這些方法中的程式碼通常會檢查目前使用者或角色是否擁有權限,而只有在權限通過驗證時才會允許作業。

若要測試您的程式碼,請同時以具權限使用者與不具權限使用者的身分執行該應用程式。藉由設定偵錯權限,您可以在測試或偵錯應用程式時模擬使用者。

若要建立權限

  1. 在 [方案總管] 中,開啟 [屬性] 節點的捷徑功能表,然後選擇 [開啟]。

  2. 在 [應用程式設計工具] 中,選擇 [存取控制] 索引標籤。

  3. 在 [定義權限或選取權限以用於偵錯:] 格線的 [名稱] 欄中,選擇 [<加入新權限>],然後輸入權限的程式設計名稱。

    此名稱必須以字母字元開頭,而且只能包含字母、數字字元或底線。

  4. 在 [顯示名稱] 欄中,輸入您希望權限出現在應用程式系統管理員用於指派角色之螢幕中的名稱。

  5. 在 [描述] 欄中,輸入權限的說明。

若要啟用進行偵錯的權限

  1. 在 [方案總管] 中,開啟 [屬性] 節點的捷徑功能表,然後選擇 [開啟]。

  2. 在 [應用程式設計工具] 中,選擇 [存取控制] 索引標籤。

  3. 在 [定義權限或選取權限以用於偵錯:] 格線中,選擇您要啟用的偵錯權限,然後選取 [針對偵錯授與] 核取方塊。

保護伺服器

下一步是加入程式碼,以使用存取控制方法在伺服器層上檢查權限。 您可以使用實體方法 (例如 CanUpdate) 或查詢方法 (例如 CanExecute) 撰寫程式碼。 基於最佳作法,您應一律使用存取控制方法來確保伺服器層的安全,以保護系統中的資料。

若要撰寫程式碼以設定實體的權限

  1. 在 [方案總管] 中,開啟某個實體節點的捷徑功能表,然後選擇 [開啟]。

    該實體的 [實體設計工具] 隨即開啟。

  2. 在 Entity Designer 中的 [透視圖] 列上,選擇 [伺服器]。

  3. 展開 [撰寫程式碼] 清單,選擇 EntityName**_Can**Operation 方法,其中 EntityName 是實體的名稱,而 Operation 則是您要為其撰寫程式碼的作業的名稱。

    注意事項注意事項

    可用的方法會因內容而異。例如 CanInsertCanDeleteCanUpdate 等範例。

  4. 在 [程式碼編輯器] 的 EntityName**_Can**Operation 方法中,輸入您要的程式碼。

    例如,允許使用者根據名為 Can_Edit_Products 的權限更新 Products 實體的程式碼如下所示:

    Private Sub Products_CanUpdate(ByRef result As Boolean)
                If Application.User.HasPermission(Can_Edit_Products) Then
                    result = True
                Else
                    result = False
                End If
    
            End Sub
    
    private void Products_CanUpdate(ref bool result)
    {
    if (Application.User.HasPermission(Can_Edit_Products)) {
    result = true;
    } else {
    result = false;
    }
    
    }
    

若要撰寫程式碼以設定查詢的權限

  1. 在 [方案總管] 中,開啟某個查詢節點的捷徑功能表,然後選擇 [開啟]。

    該查詢的 [查詢設計工具] 隨即開啟。

  2. 在 [撰寫程式碼] 清單中,選擇 QueryName**_CanExecute** 方法,其中 QueryName 是查詢的名稱。

  3. 在 [程式碼編輯器] 的 QueryName**_CanExecute** 方法中,輸入您要的程式碼。

    例如,允許使用者根據名為 Can_View_Products 的權限執行 ViewProducts 查詢的程式碼如下所示:

    Private Sub ViewProducts_CanExecute(ByRef result As Boolean)
                If Application.User.HasPermission(Can_View_Products) Then
                    result = True
                Else
                    result = False
                End If
    
            End Sub
    
    private void ViewProducts_CanExecute(ref bool result)
    {
    if (Application.User.HasPermission(Can_View_Products)) {
    result = true;
    } else {
    result = false;
    }
    
    }
    

保護用戶端

常見的案例是限制只有授權使用者可存取螢幕。 例如,所有使用者都可以檢視價格資訊,不過只有會計部門的使用者可變更此資訊。 若要在 HTML 用戶端畫面執行這項操作,您必須先建立查詢以檢查 CanExecute 方法中的權限,然後在畫面的 created 方法中撰寫 JavaScript 程式碼,以啟用或停用 UI 項目。

注意事項注意事項

如需可檢查權限的程式碼範例,請參閱本主題稍早的<若要撰寫程式碼以設定查詢的權限>一節。

若要將查詢加入畫面

  1. 在畫面設計工具的工具列中,選擇 [加入資料項目] 按鈕。

  2. 在 [加入資料項目] 對話方塊中,選擇 [查詢] 選項按鈕,然後在清單中選擇您的查詢。

  3. 在內容樹狀目錄中,選擇您要啟用或停用的 UI 項目。 這通常是啟動螢幕的按鈕,而您可以限制此螢幕的存取。

  4. 在 [屬性] 視窗中,記下 UI 項目的 [名稱] 屬性。 您將需要此項目以撰寫程式碼。

若要撰寫程式碼以設定螢幕的權限

  1. 在畫面設計工具中選擇螢幕結點,然後在工具列上展開 [撰寫程式碼] 請單,並選擇 [已建立]。

  2. 在 [程式碼編輯器] 中,於 ScreenName**_created** 方法中輸入程式碼。

    例如,根據名為 EditProducts 的查詢,啟用或停用名為 Edit按鈕的程式碼如下所示:

    myapp.ViewProducts.created = function (screen) {
        screen.getEditProducts().then (function success() {
            screen.findContentItem("Edit").isEnabled = true;
        }, function error() {
            screen.findContentItem("Edit").isEnabled = false;
        })
    };
    

    程式碼會在螢幕上呼叫查詢,且當使用者沒有執行權限時它將會失敗,並叫用錯誤處理常式。 只有在驗證使用者的權限之後,按鈕才會啟用。 若要隱藏按鈕而不是將其停用,請使用 isVisible 來取代 [isEnabled]。

    注意事項注意事項

    如果查詢因為其他原因而失敗,此方法也會停用按鈕。如果更為健全的解決方案需要更複雜的程式碼,請參閱部落格文章使用 LightSwitch ServerApplicationContext 和 WebAPI 取得使用者權限

管理

啟用驗證的最終步驟是加入管理應用程式時需要的螢幕。 在 HTML 用戶端應用程式中,您必須將 Silverlight 用戶端加入至方案。 它可提供管理所需要的預設 [使用者] 和 [角色] 畫面。 只有在發行期間指定為預設系統管理員的人員,或在之後取得 [管理] 權限的任何使用者,才能看見 Silverlight 用戶端應用程式和畫面。

若要加入管理畫面

  1. 在 [方案總管] 中,開啟最上層應用程式結點的捷徑功能表,然後選擇 [加入用戶端]。

  2. 在 [加入用戶端] 對話方塊中,選擇 [桌面用戶端] 圖示。

  3. 在 [用戶端名稱] 文字方塊中,輸入用戶端的名稱,例如 Administration,然後選擇 [確定] 按鈕。

若要定義系統管理員

  • 請依照管理 LightSwitch 應用程式中的步驟進行。

    重要

    如果驗證已啟用,而您尚未定義預設系統管理員,則您將無法存取發行的應用程式。

請參閱

工作

管理 LightSwitch 應用程式

如何:在 Silverlight 用戶端應用程式中啟用驗證

其他資源

LightSwitch 應用程式的 HTML 用戶端螢幕

使用 LightSwitch ServerApplicationContext 和 WebAPI 取得使用者權限