using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; 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)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)] public class SzerepkorValasztoController : Controller { private static readonly IEnumerable EUgyinteztesPermissions = new List { SzerepkorTipusEnum.eUgyintezo, SzerepkorTipusEnum.Alairo, SzerepkorTipusEnum.Penztaros, SzerepkorTipusEnum.PenzugyiAdmin, SzerepkorTipusEnum.EtkezesiAdmin, SzerepkorTipusEnum.EtkezesiEllenorzo, SzerepkorTipusEnum.TeremberletJelenletEllenorzo, SzerepkorTipusEnum.BelepokartyaAdmin }; 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.Dualis_Admin, SzerepkorTipusEnum.FELTAR_EsetJovahagyo, SzerepkorTipusEnum.FELTAR_EsetKozremukodo, SzerepkorTipusEnum.FELTAR_Munkavegzo, SzerepkorTipusEnum.FELTAR_SzerzodesMenedzser }; private IIdpConfiguration IdpConfiguration { get; } public SzerepkorValasztoController(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); 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")); } var role = allowedRoles[0]; ClaimManager.SetFelhasznaloSzerepkorClaim(new List { role.Key }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); 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) { var role = allowedRoles[0]; ClaimManager.SetFelhasznaloSzerepkorClaim(new List { role.Key }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } return View("Index", ModelBuilder(allowedRoles)); } if (allowedRoles.Any()) { if (allowedRoles.Count == 1) { var role = allowedRoles[0]; ClaimManager.SetFelhasznaloSzerepkorClaim(new List { role.Key }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); return Redirect(Url.Content(CommonExtensions.GetDefaultPage())); } return View("Index", ModelBuilder(allowedRoles)); } if (felhasznaloSzerepkorok.Keys.Count >= 2 && felhasznaloSzerepkorok.Keys.Any(x => Permissions.Contains(x))) { var role = allowedRoles[0]; ClaimManager.SetFelhasznaloSzerepkorClaim(new List { role.Key }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok)); 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)); } 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 }); } private SzerepkorValasztoModel ModelBuilder(List> allowedRoles) { var model = new SzerepkorValasztoModel(); 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; var currentRole = ClaimData.FelhasznaloSzerepkor; foreach (var item in allowedRoles) { model.Roles.Add(new UserRoles { Name = item.Value, Szerepkor = item.Key, IsActive = item.Key.Equals(currentRole) }); } if (currentRole.Equals(SzerepkorTipusEnum.Nincs_beallitva)) { model.CancelLinkText = StringResourcesUtil.GetString(2582); /* Kijelentkezés */ model.CancelLinkAction = "RoleChange.logout()"; } else { model.CancelLinkText = StringResourcesUtil.GetString(3059); /* Mégse */ model.CancelLinkAction = "RoleChange.back()"; } return model; } 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(); } }