後端應用程式 這是用戶名和密碼輸入的實際應用程式。您將主要在此應用程式上添加您的業務需求。 應用文件夾 後端應用程式預設內置在專用區域,名為“ App ”,但可以在創建解決方案時確定。因此,所有控制器,視圖和模型都位於 Areas / App文件夾下。此外,相關腳本和樣式文件位於wwwroot / ...
後端應用程式
這是用戶名和密碼輸入的實際應用程式。您將主要在此應用程式上添加您的業務需求。
應用文件夾
後端應用程式預設內置在專用區域,名為“ App ”,但可以在創建解決方案時確定。因此,所有控制器,視圖和模型都位於 Areas / App文件夾下。此外,相關腳本和樣式文件位於wwwroot / view-resources / Areas / App文件夾下,如下所示:
主菜單
應用程式的主菜單在AppNavigationProvider 類中定義。請參閱ABP的 導航文檔,以深入瞭解創建菜單。當您添加新的菜單項時,它會自動在佈局中呈現。
佈局
應用程式的佈局位於Areas / App / Views / Layout 文件夾下。它使用組件的頁眉,頁腳和 側邊欄:
主菜單在側邊欄組件中呈現 。佈局還高度使用捆綁和壓縮(見下文)系統的腳本和樣式包括。
版本管理
如果您沒有開發多租戶應用程式,則可以跳過本節。
大多數SaaS(多租戶)應用程式都有具有不同功能的版本(包) 。因此,他們可以為其租戶(客戶)提供不同的價格和功能選項。 版本頁面(可在host登錄中使用)用於管理應用程式的版本:
版本用於分組功能值並分配給租戶。當我們點擊版本的操作/編輯時,我們可以看到它已分配的功能:
啟動項目僅包含每個版本/租戶可以啟用/禁用聊天功能(並且它是2個子功能)。所有功能都在 AppFeatureProvider類中定義。特征值存儲在 AbpFeatures表中。功能不限於布爾(啟用/禁用)值,並且可以包含不同類型的值,如下所示:
租戶管理
如果您沒有開發多租戶應用程式,則可以跳過本節。
如果這是一個多租戶應用程式,並以host用戶身份登錄,則顯示租戶頁面:
租戶由租戶類代表。可以通過添加新的屬性類來拓展租戶類 。只有一個租戶,預設為 Default。租戶名稱(代號名稱)是租戶的唯一名稱。租戶可以是激活的或鎖定的。如果是鎖定狀態的,那麼這個租戶的用戶不能登錄到應用程式。
當我們點擊“ 創建新租戶 ”按鈕時,會顯示一個對話框:
租用名稱應該是唯一的,不能包含空格或其他特殊字元,因為它可以用作子功能變數名稱(如tenancyname.mydomain.com。請參閱下麵的部分)。名字可以是任何東西。管理員電子郵件 用作新客戶的管理員用戶的電子郵件地址。用戶將自動創建管理員用戶。我們可以為管理員設置隨機密碼併發送激活郵件。當用戶首次登錄時,他/她應該更改密碼。我們可以取消選中此項以輸入已知密碼。
當我們創建一個新的租戶時,我們應該選擇/創建一個資料庫來存儲新租戶的數據。我們可以選擇“ 使用主機資料庫 ”將租戶數據存儲在主機資料庫中(可以用於單個資料庫方法),或者我們可以指定一個連接字元串來為新租戶創建/使用專用資料庫 。AspNet Zero支持混合方式。這意味著您可以為某些租戶使用host資料庫,併為其他租戶創建專用資料庫。即使您可以將一些租戶分組在一個單獨的資料庫中。
所有租戶操作都由TenantAppService 類處理。示例(刪除租戶):
[AbpAuthorize(AppPermissions.Pages_Tenants_Delete)]
public async Task DeleteTenant(EntityRequestInput input)
{
var tenant = wait TenantManager.GetByIdAsync(input.Id);
CheckErrors(wait TenantManager.DeleteAsync(tenant));
}
TenantAppService主要使用TenantManager功能變數名稱服務進行租戶操作。
租戶版和功能
一個版本可以分配給租戶(創建或編輯)。租戶將繼承分配版本的所有功能。但是我們也可以覆蓋租戶的功能和價值。單擊 租戶的操作/更改功能以自定義 其功能:
租戶用戶模仿
作為host用戶,我們可能希望代表租戶執行操作。在這種情況下,我們可以在操作中單擊“ 登錄為此租戶 ”按鈕。當我們點擊它,我們看到一個模式來選擇租戶的用戶。我們可以選擇任何用戶並執行允許該用戶的操作。有關詳細信息,請參閱 本文檔中的“ 用戶模擬”部分。
將租約名稱用作子功能變數名稱
多租戶應用程式通常使用子域來識別當前租戶。 tenant1 .mydomain.com,tenant2 .mydomain.com等。ASP.NET Zero自動識別並從子域獲取租戶名稱(請參閱主機設置部分)。
組織單位
組織單位(OU)用於對用戶和實體進行分層分組。那麼你可以根據他們的OU來獲取用戶或實體。當我們點擊管理/組織單位時,我們進入相關頁面:
在這裡,我們可以管理OU(創建,編輯,取消,移動)和成員(添加/刪除)。
OrganizationUnitManager用於管理OU, UserManager用於管理代碼中的OU成員。 OrganizationUnitAppService執行應用程式邏輯。
在左OU樹中,我們可以右鍵單擊一個OU(或左鍵點擊到 右側的箭頭)打開OU操作的上下文菜單。當我們嘗試 添加一個成員時,顯示一個模態來選擇用戶:
這實際上是一個通用的查找模式,可用於選擇任何類型的實體(請參閱區域/應用/視圖/公共/模態/ _LookupModal.cshtml及其相關的腳本文件)。要選擇用戶,我們創建FindUsers 的方法CommonLookupAppService然後配置模式使用此方法的工作(見景資源/區/應用/瀏覽/ OrganizationUnits / index.js為lookupModal.open的使用文件)。
有關詳細信息,請參閱 組織單位管理文件。
角色管理
當我們點擊管理/角色菜單,我們進入角色管理頁面:
角色用於分組許可權。當用戶有角色時,他/她將具有該角色的所有許可權。
角色由Role類表示。角色類可以通過添加新的屬性來擴展。
RoleManager執行域邏輯,RoleAppService 執行角色的應用程式邏輯。
角色可以是動態的或靜態的:
- 靜態角色:靜態角色具有已知名稱 (如“admin”),不能更改此名稱(我們可以更改 顯示名稱)。它在系統啟動時存在,無法刪除。因此,我們可以根據靜態角色名編寫代碼。
- 動態角色:部署後可以創建動態角色。然後我們可以授予該角色的許可權,我們可以將角色分配給某些用戶,我們可以將其刪除。我們不能在開發時間內知道動態角色的名稱。
一個或多個角色可以設置為預設。預設角色預設分配給新添加/註冊的用戶。這不是開發時屬性,可以在部署後設置或更改。
在啟動項目中,我們對host(對於多租戶應用程式)具有靜態管理員角色。此外,我們還為租戶提供靜態管理員和用戶角色。管理角色預設授予所有許可權。用戶角色是新用戶的預設角色,預設情況下沒有許可權。這些可以輕鬆改變。有關所有靜態角色,請參閱StaticRoleNames類和更改靜態角色的AppRoleConfig。
角色許可權
由於角色用於分組許可權,因此我們可以在創建或編輯角色時設置許可權,如下所示:
(並非所有許可權如上圖所示)
每個租戶都有自己的角色,租戶角色的任何改變都不會影響其他租戶。而且,host也有自己的角色。
用戶管理
當我們單擊管理/用戶菜單時,我們進入用戶管理頁面:
用戶是可以登錄應用程式並根據其許可權執行某些操作的人員。
用戶類代表用戶,可以通過添加新屬性來拓展用戶類 。
UserManager 用於執行域邏輯,UserAppService用於為用戶執行應用程式邏輯。
用戶可以有零個或多個角色。如果用戶具有多個角色,則他將繼承所有這些角色的許可權。此外,我們可以設置用戶特定的許可權。用戶特定許可權設置將覆蓋此許可權的角色設置。用戶許可權對話框的截圖:
(並非所有許可權如上圖所示)
對話框用於創建/編輯用戶:
我們可以更改用戶密碼,使其 激活/鎖定 等等...用戶擁有個人資料圖片。用戶可以更改(請參閱用戶菜單部分)。管理員 用戶不能作為業務規則刪除。如果你不想使用管理員,你可以鎖定它。
用戶模擬
作為管理員(或任何允許的用戶),我們可能希望以用戶身份登錄,並代表該用戶執行操作,而不知道他的密碼。當我們在用戶的操作中點擊“ 以此用戶身份登錄 ”圖標時,我們將自動重定向並以此用戶身份登錄。這被稱為“ 用戶模擬 ”。當我們模擬用戶時,“ 回到我的帳戶 ”選項被添加到用戶配置文件菜單中:
在一個模擬帳戶中,我們只能執行該用戶允許的操作。這意味著,一切正好可以作為此相同用戶登錄自己的能力。唯一的區別是在審計日誌中顯示,這表明操作是由其他人執行的。註意; 此外,用戶名附近還顯示一個紅色的“返回”圖標,表示您處於模擬帳戶。
在Web項目的AccountController中進行模擬。
語言管理
語言管理頁面用於管理(添加/編輯/刪除)應用程式語言並更改本地化文本:
我們可以創建新語言,編輯/刪除現有語言,並將語言設置為預設語言。註意; 租戶無法編輯/刪除預設語言,但host用戶可以做。
當我們點擊更改任何語言的文本時,我們被重定向到一個新的視圖來編輯語言文本:
我們可以選擇任何語言作為基礎(參考)並更改 目標語言的文本。基礎語言只是為了幫助翻譯進度。由於可能有不同的 本地化來源,我們選擇要翻譯的源。當我們點擊編輯圖標時,我們可以看到所選文本的編輯模式:
host用戶(如果允許的話)可以編輯語言和本地化的文本。對於多租戶應用程式的所有租戶,這些語言將是預設的。 租戶繼承語言和本地化的文本,可以 覆蓋本地化的文本或添加新的語言。
兩個頁面都使用LanguageAppService類作為應用程式服務。它具有管理語言和本地化文本的方法。 IApplicationLanguageManager和IApplicationLanguageTextManager 介面用於執行域邏輯(由LanguageAppService使用)。
審核日誌
在審核日誌頁面中,我們可以看到與應用程式的所有用戶交互:
所有應用程式服務方法和MVC控制器操作都會自動記錄,可以在這裡查看。請參閱 審核日誌文檔以瞭解如何進行配置。當我們點擊放大鏡圖標時,我們可以看到所有的細節是一個審核日誌:
審計日誌報告由AuditLogAppService類提供。
主機設置
主機設置頁面用於配置一些系統設置:
時區是此頁面中的重要設置。AspNet Zero可以在多個區域工作。每個用戶可以在自己的時區中看到日期和時間。此頁面中的時區設置允許您為應用程式(包括所有租戶和用戶)設置預設時區。租戶和用戶可以在自己的設置中更改時區。時區設置僅在使用UTC時鐘時可用。 請參閱文檔以切換到UTC。
SAVE ALL按鈕可以一鍵保存所有設置。HostSettingAppService用於檢索和保存設置(有關詳細信息,請參閱設置提供程式部分)。
主機設置頁面中的“ 安全 ”選項卡包含密碼複雜性和其他安全設置。主機可以在此選項卡中定義系統範圍的安全設置。每個租戶都可以在租戶設置頁面中覆蓋此設置。PasswordComplexityChecker 類負責檢查密碼是否滿足密碼複雜度設置。
租戶設置
在多租戶應用程式中,租戶設置如下所示:
如果我們禁用多租戶,那麼這個頁面也會顯示一些主機設置(因為沒有主機設置頁面)。租戶還可以定義用戶的密碼複雜度設置,也可以使用主機用戶定義的密碼複雜度設置。
TenantSettingAppService用於獲取/設置租戶設置。
啟用LDAP(ACTIVE DIRECTORY)身份驗證
LDAP(Active Directory)預設情況下禁用身份驗證。為了使其工作,我們應該禁用多租戶,因為LDAP auth不會在多租戶系統中正常使用。在.Core項目的CoreModule類中,我們應該啟用以下行:
Configuration.Modules.ZeroLdap().Enable(typeof(AppLdapAuthenticationSource));
然後,我們可以在設置頁面中看到LDAP設置部分:
我們可以檢查“ 啟用LDAP驗證 ”以啟用它。如果伺服器在域和應用程式中運行域用戶或本地系統,則通常甚至不需要設置功能變數名稱,用戶和密碼。您可以註銷,然後使用您的域用戶名和密碼登錄。如果沒有,您應該設置這些憑據。
.Net core相容性
LDAP認證尚未被.net core支持。因此,它被設計為有條件的。如果您使用的是.Net Framework(4.6+),那麼它將可用,否則將被禁用。
維護
維護頁面可用於多租戶應用程式的host端(單租戶應用程式在租戶側顯示),如下所示:
在“ 緩存 ”選項卡中,我們可以清除一些或所有高速緩存。如果您手動更改資料庫並希望刷新應用程式緩存,則可能需要清除緩存。CachingAppService用於清除伺服器端的緩存。
網站日誌選項卡用於查看和下載日誌:
WebLogAppService用於從伺服器獲取日誌。
租戶儀錶板
ASP.NET Zero啟動項目還包括示例 儀錶板。這隻是為了演示目的,您可以將其作為實際儀錶盤的起點:
在這裡,只有會員活動圖數據從伺服器(從TenantDashboardAppService)中 檢索。您可以單擊刷新按鈕生成隨機圖。
通知
通知圖標位於語言選擇按鈕旁邊。紅色圓圈中的數字顯示未讀通知計數。
用戶可以通過點擊此圖標看到3個最近的通知。
用戶可以通過單擊“將所有設為全部”鏈接將所有通知標記為已讀,或者通過單擊每個通知旁邊的“設置為已讀”鏈接來標記單個通知。
通知使用SignalR實時發送。另外,收到 通知時會顯示桌面推送通知。
通知設置
“設置”鏈接打開通知設置對話框。
在此對話框中有一個用於啟用/禁用接收通知的全局設置。如果啟用此設置,則用戶可以單獨啟用/禁用每個通知。
您還可以在AppNotificationProvider 類中定義自定義通知。例如,新用戶的註冊通知在所定義的AppNotificationProvider如下。
context.Manager.Add(
new NotificationDefinition(
AppNotificationNames.NewUserRegistered,
displayName:L(“NewUserRegisteredNotificationDefinition”),
permissionDependency:new SimplePermissionDependency(AppPermissions.Pages_Administration_Users)
)
);
有關 詳細信息,請參閱通知定義部分。
AppNotifier類用於發佈通知。 NotificationAppService類用於管理通知的應用程式邏輯。有關詳細信息,請參閱通知文檔。
通知單
用戶的所有通知都列在此頁面中。
.Net core相容性
由於SignalR還沒有為.net core準備就緒,如果您選擇.net core作為基礎框架,實時通知將不起作用。
聊
聊天圖標位於頁面右上角的用戶個人資料圖像旁邊。紅色圓圈中的數字顯示未讀的聊天消息計數。
當用戶點擊此圖標時,聊天面板將出現在頁面右側。此面板包含用戶的朋友和被阻止的用戶列表。
用戶可以通過將用戶名寫入朋友列表中的用戶名文本框中來添加新朋友。如果為租戶啟用“與其他租戶聊天”功能,則可以通過寫[租戶名稱] \ [用戶名](例如:預設\ admin)將其他租戶的用戶添加為朋友。如果啟用了“與host用戶聊天”功能,host用戶可以通過在相同的文本框中寫入。\ [用戶名]添加為朋友。
雖然線上朋友/用戶的個人資料圖片上有一個綠色圓圈,但離線的朋友/用戶都有一個灰色的圈子。
用戶可以通過點擊聊天面板右上角的針圖標來定位或取消打開聊天面板。應用程式嘗試記住聊天面板的最後狀態,併在用戶登錄到應用程式時恢復。
當選擇了一個朋友/用戶時,會話面板被打開。
用戶可以阻止或解除此區域中的朋友/用戶。所選用戶用戶名右側有一個扳手圖標。此圖標打開一個操作菜單,該菜單包含塊用戶或根據用戶的塊狀態取消阻止用戶操作。
聊天消息通過使用ChatMessageManager域類的ChatHub signalR集線器類傳播。
ChatUserStateWatcher類負責觀看聊天用戶的線上/離線狀態更改。當用戶上線或離線時,該類抓取狀態更改並通知相關用戶的朋友。
FriendshipAppService和FriendshipManager類負責管理友誼請求。來自被阻止的用戶的聊天消息不會傳遞給目標用戶。
由於聊天是一個實時操作,應用程式會緩存線上用戶的朋友和每個朋友的未讀消息數。UserFriendsCache 類管理這些緩存操作。
UserFriendCacheSyncronizer類負責保持用戶的朋友緩存最新。為了做到這一點,它會觀看Friendship和ChatMessage實體的一些事件。
.Net core相容性
由於SignalR尚未準備好.net core,如果您選擇.net核心作為基礎框架,聊天功能將無法正常工作。
聊天功能
系統中有三個聊天功能。這些是“聊天”,“與主機聊天”,“與其他租戶聊天”。每個版本/租戶可以啟用/禁用這些功能。通過使用這些功能,主機可以啟用/禁用與其他租戶的用戶或主機用戶的聊天。
用戶菜單
用戶可以點擊右上角的姓名打開用戶菜單:
鏈接帳戶
鏈接的帳戶用於將多個帳戶相互鏈接。以這種方式,用戶可以使用此功能輕鬆瀏覽他/她的帳戶。
用戶可以通過點擊“管理帳戶”鏈接來鏈接新帳戶或刪除已鏈接的帳戶。
為了鏈接新帳戶,用戶必須輸入相關帳號的登錄憑據。
UserLinkAppService類用於管理帳戶鏈接的應用程式邏輯, UserLinkManager類用於管理用於帳戶鏈接的域邏輯。
配置文件設置
我的設置用於更改用戶配置文件設置:
如下所示,管理員用戶名無法更改。它被認為是一個特殊的用戶名,因為它被用於資料庫遷移種子。其他用戶可以更改其用戶名。ProfileAppService用於獲取/更改設置。
登錄嘗試
所有登錄嘗試(失敗的成功)都記錄在應用程式中。用戶可以看到他/她的帳戶的上次登錄嘗試。UserLoginAppService 用於從伺服器獲取登錄嘗試。
更換圖片
用戶可以更改自己的個人資料圖片。ProfileController用於上傳和獲取用戶個人資料圖片。目前,支持jpg / jpeg,gif和png文件,您可以擴展它。
更改密碼
ProfileAppService用於更改密碼。
登出
AccountController用於註銷用戶並重定向到登錄頁面。