This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,209 @@
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<SzerepkorTipusEnum> EUgyinteztesPermissions = new List<SzerepkorTipusEnum>
{
SzerepkorTipusEnum.eUgyintezo,
SzerepkorTipusEnum.Alairo,
SzerepkorTipusEnum.Penztaros,
SzerepkorTipusEnum.PenzugyiAdmin,
SzerepkorTipusEnum.EtkezesiAdmin,
SzerepkorTipusEnum.EtkezesiEllenorzo,
SzerepkorTipusEnum.TeremberletJelenletEllenorzo,
SzerepkorTipusEnum.BelepokartyaAdmin
};
private static readonly IEnumerable<SzerepkorTipusEnum> Permissions = new List<SzerepkorTipusEnum>
{
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<SzerepkorTipusEnum> { 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<SzerepkorTipusEnum> { 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<SzerepkorTipusEnum> { 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<SzerepkorTipusEnum> { role.Key }, GetEugyintezesESLPermissions(felhasznaloSzerepkorok));
return Redirect(Url.Content(CommonExtensions.GetDefaultPage()));
}
var intezmenyConfigHelper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSessionConnectionType());
if (intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.IsEnabled))
{
return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig<string>(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey));
}
if (felhasznaloSzerepkorok.Keys.All(x => EUgyinteztesPermissions.Contains(x)))
{
return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig<string>(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey));
}
if (felhasznaloSzerepkorok.Keys.All(x => x == SzerepkorTipusEnum.FokuszMonitoring))
{
return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig<string>(IntezmenyConfigModulEnum.ESL, IntezmenyConfigTipusEnum.Url), IdpConfiguration.AuthenticationTokenKey));
}
if (felhasznaloSzerepkorok.Keys.All(x => x == SzerepkorTipusEnum.LeltarConcerned))
{
return Redirect(Classes.Utils.GetAuthenticationTokenRedirectUrl(intezmenyConfigHelper.GetIntezmenyConfig<string>(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<SzerepkorTipusEnum> { 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<KeyValuePair<SzerepkorTipusEnum, string>> 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<KeyValuePair<SzerepkorTipusEnum, string>> GetAllowedRoles(Dictionary<SzerepkorTipusEnum, string> felhasznaloSzerepkorok)
=> felhasznaloSzerepkorok.Where(x => !Constants.General.NotVisiblePermissions.Contains(x.Key)).ToList();
private List<SzerepkorTipusEnum> GetEugyintezesESLPermissions(Dictionary<SzerepkorTipusEnum, string> felhasznaloSzerepkorok)
=> Permissions.Where(x => felhasznaloSzerepkorok.Keys.Any(y => y == x)).ToList();
}
}