[原文發表時間] 2012-08-15 18:04
<a href="http://blogs.msdn.com/b/beth_massi/archive/2012/08/20/vs-2012-lightswitch.aspx">第 1 部分: 表中有什麼?描述你的資料</a>
<a href="http://blogs.msdn.com/b/beth_massi/archive/2012/08/20/vs-2012-lightswitch-2.aspx">第 2 部分: 感受到關愛。定義資料關系</a>
<a href="http://blogs.msdn.com/b/beth_massi/archive/2012/08/20/vs-2012-lightswitch-3.aspx">第 3 部分,我該選擇哪一個螢幕模闆?</a>
<a href="http://blogs.msdn.com/b/beth_massi/archive/2012/08/20/vs-2012-lightswitch-4.aspx">第 4 部分: 太多的資訊了 !使用查詢來排序和篩選資料</a>
在這篇文章中,我想談一談使用者權限,也稱為通路控制。在大多數商務應用程式中,通常由于不同的職位功能或角色,我們需要限制系統中的使用者可以通路哪些資源。例如,隻有系統管理者可以向系統添加新的使用者。應用程式中的某些資料和螢幕可能很敏感,應被限制通路,除非該使用者具有該系統那部分的權限。LightSwitch 能輕松地定義使用者的權限,并提供實體、 螢幕和查詢之間的挂鈎,進而允許你檢視這些權限。
驗證和授權
LightSwitch 應用程式需要兩塊資訊來确定哪些使用者應具有系統哪些部分的權限。首先,系統需要驗證使用者是否可以通路該應用程式。這稱為驗證。換句話說:"證明你是你所說的誰"。LightSwitch中有兩個支援驗證類型:Windows和Forms。
Windows 驗證是指應用程式基于Windows憑據而信任該使用者。是以一旦使用者成功登入到其 Windows 桌面中,這些憑據将自動傳遞到 LightSwitch 應用程式。Forms驗證意味着應用程式請求一個自己的使用者名和密碼,完全獨立于任何其它憑據。是以當你選擇使用Forms驗證時,一個登入螢幕将呈現給使用者,使用者每次通路該應用程式時,必須輸入使用者名和密碼。
一旦使用者進行身份驗證了,應用程式可以通過閱讀他們的使用者權限來确定允許通路系統哪些部分。這被稱為授權。換句話說:"現在,我知道你是誰,這兒是你在系統中可以做的"。
設定使用者權限
這一切都是從項目屬性中的Access Control(通路控制)頁籤開始的。要打開它,右擊解決方案資料總管中的項目名稱,并從菜單中選擇"屬性"。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/6278.image_5F00_4C1B602A.png"></a>
然後選擇Access Control(通路控制)頁籤,指定你想要的驗證類型,以及你想要定義的使用者權限。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/3058.image_5F00_055E9A95.png"></a>
預設情況下,應用程式不會啟用驗證,是以在這裡,你可以選擇你要使用的身份驗證類型。
使用Forms身份驗證意味着你需要将使用者名和加密的密碼存儲在 LightSwitch 資料庫中。這種類型的身份驗證适用于基于網際網路的應用程式,那裡使用者不在同一網絡中,你需要支援除Windows之外的其它作業系統。
如果你的所有使用者都在同一網絡/域或工作組中,就像在内部的業務線應用程式的情況下,使用 Windows 身份驗證是合适的。這意味着無需将密碼存儲在LightSwitch 應用程式中。相應地Windows 登入憑據被使用了并自動傳遞給應用程式。如果你可以使用它,這是一種更安全、 更友善的選擇。在這種情況下,你還可以選擇是否要設定特定的使用者和角色,或是否任何驗證過的使用者都可以通路該應用程式。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/0728.image_5F00_44501B30.png"></a>
對于 Windows 身份驗證兩個最佳選擇是:
給管理應用程式的 Windows 使用者特殊權限和角色。(如果你選擇了 Windows 身份驗證,它一直在啟用狀态。)
此外,允許任何Windows 使用者通路我的應用程式中未受保護的部分
下一步在代碼中定義使用者權限來通路資源 (我們會在下一步中用示例示範)。一旦你部署了該應用程式,SecurityAdministration權限總是為你定義好了,一旦你部署了應用程式,它就由LightSwitch所使用。當你部署時,LightSwitch 将建立一個具有此權限的單個使用者,這将讓他們可以通路所需的螢幕來定義系統中其餘使用者和角色。然而,在調試應用程式時,LightSwitch 不會登陸你的賬号,因為每次建構并運作應用程式(按F5)時,這将是非常冗長乏味的。是以你可以使用“Granted for debug(授予調試”)複選框來訓示哪些權限集應在調試會話中打開 / 關閉。
讓我們通過在這個系列建立的通訊簿中執行一些關于安全性的操作來做下示範。
在通訊簿應用程式中檢查使用者權限
讓我們從選擇驗證方案開始。由于此應用程式将會用于一家小型企業來管理他們的所有聯系人,我将選擇 Windows驗證。我也可以選擇"允許任何經過驗證的 Windows 使用者"進入系統,那樣在預設情況下,公司的每個人都可以搜尋和編輯聯系人。不過,為了添加或删除聯系人,使用者将需要特殊的權限來做到這一點。
是以我們需要建立兩個新的權限。你可以将權限命名為任何你想要的。你隻能在代碼中看到名稱。當系統管理者設定了使用者和角色後時,他們會在螢幕上看到顯示名稱,是以添加兩個權限 ;CanAddContacts 和 CanDeleteContacts。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/7824.image_5F00_51B62E36.png"></a>
下一步,為這兩個權限取消勾選"授權調試",那樣我們可以測試它們是正常運作的。當你取消勾選它時,不會授予此權限。這使得我們在調試時可以輕松地測試權限組合。若要在調試時檢視使用者和角色螢幕,你可以為 SecurityAdministration啟用它。既然我們已經在這裡設定好了這些權限,我們需要在代碼中檢查它們。正如我所提到的,LightSwitch為你提供了方法,是以,當你需要各種自定義驗證和商務規則,包括通路控制時,你可以編寫代碼。
為了執行安全性,我們需要編寫幾行代碼來檢查這些權限。LightSwitch 提供關于實體、 螢幕和查詢的通路控制方法。若要通路這些方法,下拉任何設計器右上角的清單,選擇“Write code(編寫代碼)” ,你将在清單中看到“Access Control Methods(通路控制方法)” 部分。當你想要限制檢視 (閱讀),插入 (添加),編輯或删除實體時,打開資料設計器中的實體,然後下拉“編寫代碼” 按鈕,再選擇适當的通路控制方法。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/0410.image_5F00_3056889A.png"></a>
至于此應用程式,選擇Contacts_CanDelete 方法,這将打開代碼編輯器到該方法存根的地方。你需要做的就是寫一行代碼 (下面以粗體顯示) 來檢查你設定的 CanDeleteContacts 權限:
VB:
C#:
現在回到設計器中的"編寫代碼"按鈕,選擇 Contacts_CanInsert ,然後類似地編寫下面的代碼行(以粗體顯示) 來檢查CanAddContacts的 權限:
你可能想知道為什麼我們要在實體中檢查這些權限,而不是在螢幕上。在實體中檢查權限能保證無論使用者在使用哪些螢幕時,資料操作都能受到保護。如果你需要在應用程式中執行使用者權限,最佳做法是記住首先要確定你的實體安全。然而,我們的應用程式還有一個" Create New Contact(建立新的聯系人)"螢幕,如果他們沒有權限将聯系人添加到系統中,我們則不想在菜單上顯示給使用者。如果我們忘記了從菜單中隐藏此螢幕,那麼使用者将能夠打開它并填寫資料。不過,當它們單擊儲存時,上述Contacts_CanInsert 方法将運作并阻止實際資料的存儲。
是以為了從導航菜單中隐藏此螢幕,我們需要添加更多的檢查。輕按兩下解決方案資料總管中的CreateNewContact 螢幕來打開螢幕設計器。下拉右上方的"編寫代碼"按鈕,你将看到一個針對螢幕的可用Access Control方法:
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/4201.image_5F00_41C6E972.png"></a>
選擇CreateNewContact_CanRun 方法,編寫以下代碼行(以粗體顯示):
運作它 !
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/1067.image_5F00_2F11EFBB.png"></a>
在左側内容樹中,展開資料網格下的指令欄,然後添加兩個指令 ;DeleteSelected 和 AddAndEditNew。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/1067.image_5F00_3B9F9CD7.png"></a>
單擊Save 按鈕(ctrl + shift + S)來儲存并退出定制模式,并注意指令被禁用了。由于我們沒有權限來添加或删除聯系人,這種行為是正确的。也因為我們是在實體級别檢查這些權限,所有的螢幕指令都正常運作,不需要額外代碼。如果你退回到項目屬性的Access Control頁籤,你可以勾選你要測試的權限組合,你将會看到所有指令都正确地啟用/禁用。
使用者和角色螢幕
在我們總結之前,我想快速浏覽一下使用者和角色螢幕。當你為調試啟用SecurityAdministration 權限時,這些螢幕在菜單上是可用的。但是,請記住,放入這些螢幕的資料在調試時并沒有使用。直到你部署應用程式使用這些螢幕,這些資料才會被使用。是以将資料放入這些螢幕僅僅出于示範目的。當第一次部署你的應用程式時,LightSwitch 将詢問管理者的使用者名和密碼,它将部署到使用者表中,并授予 SecurityAdministration 權限。然後該管理者可以輸入可以進入該系統的其他使用者。
首先定義角色,然後使用角色螢幕為該角色添加你所定義的權限。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/8738.image_5F00_5E805E87.png"></a>
然後你可以使用使用者螢幕來添加新使用者和活動目錄組,并将他們配置設定給合适的角色。如果你配置設定一個角色給AD(活動目錄組),然後添加該組的一名使用者到系統中,LightSwitch會提示繼承該使用者所在組的哪些角色。
<a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/0728.image_5F00_0B954B56.png"></a>
總結
正如你看到的,在Visual Studio LightSwitch中定義和檢查使用者權限是一個簡單但重要的任務。在專業的商務應用程式中,通路控制是一個很常見的要求,LightSwitch 提供了一個簡單的方法來使用架構,通過方法将實體、 螢幕和查詢挂鈎,鎖定了應用程式的所有部分。一旦你部署你的應用程式,系統管理者可以開始設定使用者和角色來控制通路你的應用程式的安全部分。
在下一篇文章中,我們将讨論主題以及通過安裝 LightSwitch 擴充如何更改應用程式的外觀和感覺。我們将看看什麼是可用且免費的,以及一些看起來很棒但很便宜的擴充。下一次再���!
希望大家喜歡 !