209 lines
10 KiB
C#
209 lines
10 KiB
C#
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();
|
|
}
|
|
}
|