using BeWo.Data.Access; using BeWo.Data.Entities; using BS.Shared; using BS.Shared.DataContracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BeWo.Data.Security { public class UserRightHelper { public static readonly string BASE_VERSION = "1.0"; public static ApplicationUser GetLoggedInUser() { return LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser; //if (LoggedInUserOperationContextExt.Current != null && // LoggedInUserOperationContextExt.Current.User != null) //{ // return LoggedInUserOperationContextExt.Current.User; //} //else //{ // return SessionFacade.LoggedInUser; //} //return null; } public static bool LoggedInUserHasRight(UserRightType right) { return GetGrantedRights(GetLoggedInUser()).Contains(right); } public static bool UserHasRight(ApplicationUser user, UserRightType right) { return GetGrantedRights(user).Contains(right); } public static List GetGrantedRights(ApplicationUser user) { var rights = new List(); foreach (var ug in user.UserGroups) { foreach (var rr in ug.Rights) { rights.Add(rr.RightType); } } return rights; } public static String GetBeWoVersion() { return GetBeWoVersion(GetLoggedInUser().LoginName); } public static String GetBeWoVersion(String loginName) { var lastLogins = DAOFactory.SearchDAO.FindLastLogins(loginName, 1).ToList(); if (lastLogins != null && lastLogins.Count > 0) { var login = lastLogins[0]; if (!String.IsNullOrEmpty(login.Referrer)) { //var test = "MobilClient, Version: Unbekannt"; //var test2 = "BeWoClient, Version: Microsoft Windows NT 6.2.9200.0;CLRVersion=4.0.30319.42000;BeWoVersion=Version 3.16;IsNet45OrNewer=True"; var str = login.Referrer; var start = str.IndexOf("BeWoVersion="); if (start > 0) { var stop = str.IndexOf(";", start); if (stop > start) { var version = str.Substring(start + 12, stop - start - 12); version = version.Replace("Version", "").Trim(); return version; } } } } return ""; } public static void CheckRightVersion(UserDC user) { var version = GetBeWoVersion(GetLoggedInUser().LoginName); CheckRightVersion(version, user); } public static void CheckRightVersion(UserGroupDC groupDC) { var version = GetBeWoVersion(GetLoggedInUser().LoginName); CheckRightVersion(version, groupDC); } public static void CheckRightVersion(String version, UserDC userDC) { foreach (var ug in userDC.UserGroups) { CheckRightVersion(version, ug); } } public static void CheckRightVersion(String version, UserGroupDC ug) { var allrights = ug.Rights; ug.Rights = new List(); foreach (var r in allrights) { if (IsCorrectVersion(r, version)) { ug.Rights.Add(r); } } } public static bool IsCorrectVersion(UserRightType r, string version) { var rightVersion = GetRightVersion(r); if (!String.IsNullOrEmpty(version) && version.CompareTo(rightVersion) < 0) { return false; } return true; } public static String GetRightVersion(UserRightType r) { if (r == UserRightType.Customer_ViewBetreuung || r == UserRightType.Customer_ViewAbsenceTimes) { return "3.17"; } if (r == UserRightType.AdditionalService_Edit) { return "3.18"; } if (r == UserRightType.Customer_EditMedication) { return "3.19"; } if (r == UserRightType.SupportConcept_ImportData || r == UserRightType.AiChatInZeiterfassung || r == UserRightType.FinanzenRechnungenNachVersandBearbeiten) { return "3.21"; } var rights_3_22 = new List { UserRightType.DienstplanungBearbeiten, UserRightType.WohnheimView_Wohneinheit_Belegung_View, UserRightType.WohnheimView_Wohneinheit_Belegung_Manage, UserRightType.WohnheimView_Wohneinheit_View, UserRightType.WohnheimView_Wohneinheit_Manage, UserRightType.WohnheimView_Wohneinheit_Gallery_View, UserRightType.WohnheimView_Wohneinheit_Gallery_Manage, UserRightType.Customer_GemeinnutzigeArbeit_View, UserRightType.Customer_GemeinnutzigeArbeit_Manage, UserRightType.Customer_Wohnhilfe_View, UserRightType.Customer_Wohnhilfe_Manage, UserRightType.Finance_Gkv_View, UserRightType.Finance_Gkv_Create, UserRightType.Finance_Gkv_Send, UserRightType.Finance_Gkv_Delete }; if (rights_3_22.Contains(r)) { return "3.22"; } return BASE_VERSION; } } }