using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using Kreta.BusinessLogic.Helpers; using Kreta.Core; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Web.Areas.Adminisztracio.Models; using Kreta.Web.Configuration; using Kreta.Web.Helpers; using Kreta.Web.Security; using Kreta.Web.Utils; namespace Kreta.Web.Areas.Adminisztracio.Controllers { [MvcRoleClaimsAuthorize(true)] public class BelepesKezeloController : Controller { private static readonly IEnumerable EUgyinteztesPermissions = new List { SzerepkorTipusEnum.eUgyintezo, SzerepkorTipusEnum.Alairo, SzerepkorTipusEnum.Penztaros, SzerepkorTipusEnum.PenzugyiAdmin, SzerepkorTipusEnum.EtkezesiAdmin, SzerepkorTipusEnum.EtkezesiEllenorzo, SzerepkorTipusEnum.TeremberletJelenletEllenorzo, SzerepkorTipusEnum.alkalmazott, SzerepkorTipusEnum.BelepokartyaAdmin }; private static readonly IEnumerable DKTPermissions = new List { SzerepkorTipusEnum.Naplo, SzerepkorTipusEnum.Ellenorzo, }; private static readonly IEnumerable ESLPermissions = new List { SzerepkorTipusEnum.FokuszMonitoring, }; private static readonly IEnumerable FokuszPermissions = new List { SzerepkorTipusEnum.Naplo, SzerepkorTipusEnum.FokuszMonitoring, }; private static readonly IEnumerable LeltarPermissions = new List { SzerepkorTipusEnum.LeltarConcerned, }; private static readonly IEnumerable eJelentkezesPermissions = new List { SzerepkorTipusEnum.Adminisztrator, }; private static readonly IEnumerable Permissions = new List { SzerepkorTipusEnum.eUgyintezo, SzerepkorTipusEnum.Alairo, SzerepkorTipusEnum.Penztaros, SzerepkorTipusEnum.PenzugyiAdmin, SzerepkorTipusEnum.EtkezesiAdmin, SzerepkorTipusEnum.EtkezesiEllenorzo, SzerepkorTipusEnum.TeremberletJelenletEllenorzo, SzerepkorTipusEnum.FokuszMonitoring, SzerepkorTipusEnum.IskolaEgeszsegugyiKoordinator, SzerepkorTipusEnum.Vedono, SzerepkorTipusEnum.Iskolaorvos, SzerepkorTipusEnum.IskolaEgeszsegugyiAsszisztens, SzerepkorTipusEnum.IskolaEgeszsegugyiLekerdezo, SzerepkorTipusEnum.BelepokartyaAdmin, SzerepkorTipusEnum.LeltarConcerned, SzerepkorTipusEnum.Konyvtaros, SzerepkorTipusEnum.FELTAR_EsetKezelo, SzerepkorTipusEnum.FELTAR_EszkozMenedzser, SzerepkorTipusEnum.KerdoivKitolto_KerdoivKezelo, SzerepkorTipusEnum.FELTAR_EsetJovahagyo, SzerepkorTipusEnum.FELTAR_EsetKozremukodo, SzerepkorTipusEnum.FELTAR_Munkavegzo, SzerepkorTipusEnum.FELTAR_SzerzodesMenedzser }; private IIdpConfiguration IdpConfiguration { get; } public BelepesKezeloController(IIdpConfiguration idpConfiguration) { IdpConfiguration = idpConfiguration ?? throw new ArgumentNullException(nameof(idpConfiguration)); } public ActionResult Index() { var felhasznaloSzerepkorok = ClaimData.FelhasznaloSzerepkorok; // NOTE: Ha a felhasználó szerepkörök között szerepel kréta adminisztrátor és amellett szervezethez köthető szerepkör(pl.: duális adminisztrátor), // akkor azokat nem kell megjeleníteni, mert azok részei az intézményi kréta admin felületének/menüjének, ezért az ilyen szerepköröket kivesszük a listából. if (felhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Adminisztrator) && felhasznaloSzerepkorok.Any(x => FelhasznaloHelper.SzervezetiPermissions.Contains(x.Key))) { foreach (var szerepkorTipusEnum in FelhasznaloHelper.SzervezetiPermissions) { felhasznaloSzerepkorok.Remove(szerepkorTipusEnum); } } var allowedRoles = GetAllowedRoles(felhasznaloSzerepkorok); ClaimManager.SetFelhasznaloSzerepkorClaim(allowedRoles.Any() ? allowedRoles.Select(x => x.Key).ToList() : felhasznaloSzerepkorok.Keys.Any() ? felhasznaloSzerepkorok.Select(x => x.Key).ToList() : new List(), GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); if (ClaimData.JustLEPOrganization && !ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Adminisztrator)) { var lepEloadasJegyzekHelper = new LepEloadasJegyzekHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var hasLepAccess = lepEloadasJegyzekHelper.HasLEPAccess(ClaimData.FelhasznaloId); if (!hasLepAccess) { return Redirect(Url.Content(@"~/HibaOldal/IndexLEPNincsJog")); } return Redirect(Url.Content(@"~/LEPModul/EloadasokKezelese")); } // NOTE: Ha a belépett felhasználó szervezethez köthető alkalmazott(pl.: duális oktató), akkor semmi más ne jelenjen meg csak a szervezethez köthető elemek. var isAlkalmazottSzervezeti = new SzervezetHelper(ConnectionTypeExtensions.GetSessionConnectionType()).IsAlkalmazottSzervezeti(ClaimData.FelhasznaloId); if (isAlkalmazottSzervezeti) { if (allowedRoles.Count == 1) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } return View("Index", ModelBuilder(allowedRoles, false, false, false, false, false, false, false)); } var isDktAktiv = IsDktAktiv(felhasznaloSzerepkorok); var isEugyAktiv = IsEugyAktiv(felhasznaloSzerepkorok); var isEslAktiv = IsESLAktiv(felhasznaloSzerepkorok); var isFokuszAktiv = IsFokuszAktiv(felhasznaloSzerepkorok); var isLeltarAktiv = IsLeltarAktiv(felhasznaloSzerepkorok); var isKonyvtarAktiv = IsKonyvtarModulAktiv(); var isEJelentkezesAktiv = IsEJelentkezesAktiv(felhasznaloSzerepkorok); if (allowedRoles.Any()) { if (allowedRoles.Count == 1 && !isDktAktiv && !isEugyAktiv && !isEslAktiv && !isFokuszAktiv && !isLeltarAktiv && !isKonyvtarAktiv && !isEJelentkezesAktiv) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } return View("Index", ModelBuilder(allowedRoles, isDktAktiv, isEugyAktiv, isEslAktiv, isFokuszAktiv, isLeltarAktiv, isKonyvtarAktiv, isEJelentkezesAktiv)); } if (felhasznaloSzerepkorok.Keys.Count >= 2 && felhasznaloSzerepkorok.Keys.Any(x => Permissions.Contains(x))) { return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } var intezmenyConfigHelper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.IsEnabled)) { return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } if (felhasznaloSzerepkorok.Keys.All(x => EUgyinteztesPermissions.Contains(x))) { return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } if (felhasznaloSzerepkorok.Keys.All(x => x == SzerepkorTipusEnum.FokuszMonitoring)) { return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.ESL, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } if (felhasznaloSzerepkorok.Keys.All(x => x == SzerepkorTipusEnum.LeltarConcerned)) { return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Leltar, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return View("Index", ModelBuilder(allowedRoles, isDktAktiv, isEugyAktiv, isEslAktiv, isFokuszAktiv, isLeltarAktiv, isKonyvtarAktiv, isEJelentkezesAktiv)); } public ActionResult ChangeRole(SzerepkorTipusEnum role) { var felhasznaloSzerepkorok = ClaimData.FelhasznaloSzerepkorok; if (felhasznaloSzerepkorok.ContainsKey(role)) { ClaimManager.SetFelhasznaloSzerepkorClaim(new List { role }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); var isPedagogiaiSzakszolgalat = role == SzerepkorTipusEnum.Adminisztrator && new MukodesiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetMukodesiHelyekForFelhelyValaszto().Any(x => x.FelhelyId.IsEntityId()); return Json(new { Url = Url.Content(isPedagogiaiSzakszolgalat ? Constants.General.FelHelyValasztoPage : CommonExtensions.GetDefaultPage()), Success = true }); } return Json(new { Success = false }); } public ActionResult Eugyintezes() { if (IsEugyAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult DKTTanar() { if (IsDktAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var intezmenyData = helper.GetIntezmenyiAdatok(); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyData.DKTTanarUrl, IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult DKTDiak() { if (IsDktAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var intezmenyData = helper.GetIntezmenyiAdatok(); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyData.DKTDiakUrl, IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult ESL() { if (IsESLAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.ESL, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult Fokusz() { if (IsFokuszAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Fokusz, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult Leltar() { if (IsLeltarAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Leltar, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult Konyvtar() { if (IsKonyvtarModulAktiv()) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } public ActionResult EJelentkezes() { if (IsEJelentkezesAktiv(ClaimData.FelhasznaloSzerepkorok)) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.eJelentkezes, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey)); } return null; } private BelepesKezeloModel ModelBuilder(List> allowedRoles, bool isDktAktiv, bool isEugyAktiv, bool isEslAktiv, bool isFokuszAktiv, bool isLeltarAktiv, bool isKonyvtarAktiv, bool isEJelentkezesAktiv) { var model = new BelepesKezeloModel(); var shortname = ClaimData.OrganizationShortName; model.OrganizationName = ClaimData.OrganizationCode + " - " + (string.IsNullOrWhiteSpace(shortname) ? ClaimData.OrganizationName : shortname); model.UserName = $"{ClaimData.FelhasznaloNev} {(!string.IsNullOrWhiteSpace(ClaimData.GondviseloNeve) ? "(" + ClaimData.GondviseloNeve + ")" : "")}"; model.ProfilImgSrc = ProfileUtils.UserProfileImage; foreach (var item in allowedRoles) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = item.Value, Szerepkor = item.Key, Tipus = BelepesKezeloModel.LehetosegTipus.Kreta }); } if (isDktAktiv) { var naplo = false; var ellenorzo = false; foreach (var role in allowedRoles) { if (role.Key == SzerepkorTipusEnum.Naplo) { naplo = true; } if (role.Key == SzerepkorTipusEnum.Ellenorzo) { ellenorzo = true; } } if (naplo) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "Digitális Kollaborációs Tér" + (ellenorzo ? " (Tanár)" : ""), Szerepkor = SzerepkorTipusEnum.Naplo, Tipus = BelepesKezeloModel.LehetosegTipus.DKT }); } if (ellenorzo) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "Digitális Kollaborációs Tér" + (naplo ? " (Diák)" : ""), Szerepkor = SzerepkorTipusEnum.Ellenorzo, Tipus = BelepesKezeloModel.LehetosegTipus.DKT }); } } if (isEugyAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "e-Ügyintézés", Tipus = BelepesKezeloModel.LehetosegTipus.Eugy }); } if (isEslAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "ESL", Tipus = BelepesKezeloModel.LehetosegTipus.ESL }); } if (isFokuszAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "Fókusz", Tipus = BelepesKezeloModel.LehetosegTipus.Fokusz }); } if (isLeltarAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "KRÉTA Leltár", Tipus = BelepesKezeloModel.LehetosegTipus.Leltar }); } if (isKonyvtarAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "Könyvtár modul", Tipus = BelepesKezeloModel.LehetosegTipus.Konyvtar }); } if (isEJelentkezesAktiv) { model.Lehetosegek.Add(new BelepesKezeloModel.BelepesiLehetoseg { Name = "e-Jelentkezés", Tipus = BelepesKezeloModel.LehetosegTipus.EJelentkezes }); } model.CancelLinkText = StringResourcesUtil.GetString(2582); /* Kijelentkezés */ model.CancelLinkAction = "BelepesKezelo.logout()"; return model; } private bool IsDktAktiv(Dictionary felhasznaloSzerepkorok) { if (felhasznaloSzerepkorok.Keys.Any(x => DKTPermissions.Contains(x)) && !ClaimData.GondviseloId.HasValue) { var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (helper.GetIntezmenyiAdatok().IsDKTAktiv) { return true; } } return false; } private bool IsEugyAktiv(Dictionary felhasznaloSzerepkorok) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.IsEnabled)) { if (ClaimData.GondviseloId.HasValue) { return !new GondviseloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).IsCsokkentettGondviselo(ClaimData.GondviseloId.Value); } if (felhasznaloSzerepkorok.Keys.Any(x => EUgyinteztesPermissions.Contains(x)) || felhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Adminisztrator)) { if (ClaimData.IsDefaultAdminUser || ClaimData.BelepesiNev.ToUpper() == Constants.General.KretaTechnicalUserNev.ToUpper()) { return false; } return true; } } return false; } private bool IsESLAktiv(Dictionary felhasznaloSzerepkorok) { var fHelper = new FelhasznaloHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var felhasznaloiJogosultsagok = fHelper.GetFelhasznaloiJogosultsagok(ClaimData.FelhasznaloId, (int)SzerepkorTipusEnum.Naplo); if (felhasznaloSzerepkorok.Keys.Any(x => ESLPermissions.Contains(x)) || felhasznaloiJogosultsagok.Contains("Osztalyfonok") || felhasznaloiJogosultsagok.Contains("SzuperOsztalyfonok")) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.ESL, IntezmenyConfigTipusEnum.IsEnabled)) { if (felhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Ellenorzo) || ClaimData.IsDefaultAdminUser) { return false; } return true; } return false; } return false; } private bool IsFokuszAktiv(Dictionary felhasznaloSzerepkorok) { if (felhasznaloSzerepkorok.Keys.Any(x => FokuszPermissions.Contains(x))) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Fokusz, IntezmenyConfigTipusEnum.IsEnabled)) { if (felhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Ellenorzo) || ClaimData.IsDefaultAdminUser || ClaimData.IsPortas) { return false; } return true; } return false; } return false; } private bool IsLeltarAktiv(Dictionary felhasznaloSzerepkorok) { if (felhasznaloSzerepkorok.Keys.Any(x => LeltarPermissions.Contains(x))) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Leltar, IntezmenyConfigTipusEnum.IsEnabled)) { return true; } return false; } return false; } private bool IsKonyvtarModulAktiv() { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (!ClaimData.GondviseloId.HasValue && helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.IsEnabled)) { return true; } return false; } private bool IsEJelentkezesAktiv(Dictionary felhasznaloSzerepkorok) { if (felhasznaloSzerepkorok.Keys.Any(x => eJelentkezesPermissions.Contains(x))) { var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.eJelentkezes, IntezmenyConfigTipusEnum.IsEnabled)) { if (felhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Adminisztrator) && !ClaimData.IsDefaultAdminUser) { return true; } return false; } return false; } return false; } private List> GetAllowedRoles(Dictionary felhasznaloSzerepkorok) => felhasznaloSzerepkorok.Where(x => !Constants.General.NotVisiblePermissions.Contains(x.Key)).ToList(); private List GetEugyintezesESLPermissions(Dictionary felhasznaloSzerepkorok) => Permissions.Where(x => felhasznaloSzerepkorok.Keys.Any(y => y == x)).ToList(); } }