Files
BeWoPlaner/Data/Security/UserRightHelper.cs

264 lines
7.4 KiB
C#
Raw Permalink Normal View History

2023-11-08 00:34:17 +01:00
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BS.Shared;
2023-11-08 00:34:17 +01:00
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BeWo.Data.Security
{
2025-05-15 10:39:48 +02:00
public class UserRightHelper
{
public static readonly string BASE_VERSION = "1.0";
2026-02-19 14:32:37 +01:00
public static string GetTenant()
{
if (MultitenancyOperationContextExt.Current != null)
return MultitenancyOperationContextExt.Current.Tenant;
return SessionFacade.Tenant;
2026-02-19 14:32:37 +01:00
}
public static Employee GetLoggedInEmployee()
{
return GetLoggedInUser()?.Employee;
}
2025-05-15 10:39:48 +02:00
public static ApplicationUser GetLoggedInUserWithOid()
{
if (GetLoggedInUser() is ApplicationUser user && user.Oid is long)
return user;
2025-05-15 10:39:48 +02:00
throw new InvalidOperationException("RequireLoggedInUserOid");
}
public static ApplicationUser GetLoggedInUser()
2025-05-15 10:39:48 +02:00
{
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<UserRightType> GetGrantedRights(ApplicationUser user)
{
var rights = new List<UserRightType>();
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)
{
2025-06-11 22:56:25 +02:00
var liu = GetLoggedInUser();
if (liu != null)
{
var version = GetBeWoVersion(liu.LoginName);
CheckRightVersion(version, user);
}
2025-05-15 10:39:48 +02:00
}
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<UserRightType>();
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.FinanzenRechnungenNachVersandBearbeiten)
2025-05-15 10:39:48 +02:00
{
return "3.21";
}
if (isRightVersion322(r))
return "3.22";
if (isRightVersion329(r))
return "3.29";
if (isRightVersion330(r))
return "3.30";
2026-05-07 00:46:41 +02:00
if (isRightVersion331(r))
return "3.31";
if (isRightVersion332(r))
return "3.32";
2026-05-07 00:46:41 +02:00
return BASE_VERSION;
2025-05-15 10:39:48 +02:00
}
private static bool isRightVersion322(UserRightType r)
{
return r == UserRightType.DienstplanungBearbeiten
|| r == UserRightType.WohnheimView_Wohneinheit_Belegung_View
|| r == UserRightType.WohnheimView_Wohneinheit_Belegung_Manage
|| r == UserRightType.WohnheimView_Wohneinheit_View
|| r == UserRightType.WohnheimView_Wohneinheit_Manage
|| r == UserRightType.WohnheimView_Wohneinheit_Gallery_View
|| r == UserRightType.WohnheimView_Wohneinheit_Gallery_Manage
|| r == UserRightType.Customer_GemeinnutzigeArbeit_View
|| r == UserRightType.Customer_GemeinnutzigeArbeit_Manage
|| r == UserRightType.Customer_Wohnhilfe_View
|| r == UserRightType.Customer_Wohnhilfe_Manage
|| r == UserRightType.Finance_Gkv_View
|| r == UserRightType.Finance_Gkv_Create
|| r == UserRightType.Finance_Gkv_Send
|| r == UserRightType.Finance_Gkv_Delete;
}
2025-03-14 14:04:46 +01:00
private static bool isRightVersion329(UserRightType r)
{
return r == UserRightType.Employee_AllowEditAbsenceTimes
|| r == UserRightType.Employee_AllowEditOvertimes;
}
private static bool isRightVersion330(UserRightType r)
{
return r == UserRightType.KalenderInAbwesenheitenUebernehmen
//|| r == UserRightType.AiModuleChatView
//|| r == UserRightType.AiModuleChatClone
//|| r == UserRightType.AiModuleViewSetting
//|| r == UserRightType.AiModuleChatAdd
//|| r == UserRightType.AiModuleChatDelete
//|| r == UserRightType.AiModuleChatEdit
//|| r == UserRightType.AiModulePromptbausteineAdd
|| r == UserRightType.AiModulePromptbausteineEdit
//|| r == UserRightType.AiModulePromptbausteineRemove
//|| r == UserRightType.AiModulePromptbausteineSeeAll
|| r == UserRightType.AiModulePromptbausteineView
//|| r == UserRightType.AiModulePromptbausteineExecute
|| r == UserRightType.AiModulePromptbausteinShare
|| r == UserRightType.AiModuleServiceRecordChat
|| r == UserRightType.AiModuleServiceRecordDocu
|| r == UserRightType.AiVoiceView;
}
2026-03-04 11:40:26 +01:00
2026-05-07 00:46:41 +02:00
private static bool isRightVersion331(UserRightType r)
{
return r == UserRightType.VorlagenEditAll
|| r == UserRightType.VorlagenEditOwnTeams
|| r == UserRightType.VorlagenViewAll
|| r == UserRightType.VorlagenViewOwnTeams
|| r == UserRightType.Customer_CreateMedication
|| r == UserRightType.Customer_DeleteMedication;
}
private static bool isRightVersion332(UserRightType r)
{
return r == UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry;
}
2026-05-07 00:46:41 +02:00
}
}