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 ApplicationUser GetLoggedInUser() { 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.FinanzenRechnungenNachVersandBearbeiten) { return "3.21"; } return "1.0"; } } }