kreta/KretaWeb/Security/KretaAuthorization.cs
2024-03-13 00:33:46 +01:00

236 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Client.KGR;
using Kreta.Core;
using Kreta.Enums.ManualEnums;
using Kreta.Web.Helpers;
namespace Kreta.Web.Security
{
public class KretaAuthorization : IKretaAuthorization
{
public bool IsValidEvent(int eventId, CalendarOraTypeEnum calendarOraType, DateTime date)
{
switch (calendarOraType)
{
case CalendarOraTypeEnum.OrarendiOra:
return IsValidOrarendiOra(eventId, date);
case CalendarOraTypeEnum.TanitasiOra:
return IsValidTanitasiOra(eventId);
case CalendarOraTypeEnum.TanoranKivuliFoglalkozas:
case CalendarOraTypeEnum.TanoranKivuliNaplozottFoglalkozas:
case CalendarOraTypeEnum.TanoranKivuliTevekenyseg:
case CalendarOraTypeEnum.Egyeb:
case CalendarOraTypeEnum.UresOra:
case CalendarOraTypeEnum.TanevRendjeEsemeny:
return true;
}
return false;
}
public bool IsValidOrarendiOra(int orarendiOraId, DateTime oraDatuma)
{
if (ClaimManager.HasPackage(KretaClaimPackages.Ellenorzo.ClaimValue))
{
return AuthorizationHelper.OrarendiOra.TanuloHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), orarendiOraId, oraDatuma);
}
return true;
}
public bool IsValidTanitasiOra(int tanitasiOraId)
{
if (ClaimManager.HasPackage(KretaClaimPackages.Ellenorzo.ClaimValue))
{
return AuthorizationHelper.TanitasiOra.TanuloHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), tanitasiOraId);
}
return true;
}
public bool IsValidNemKotottMunkaido(int nemKotottMunkaidoId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.NemKotottMunkaido.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), nemKotottMunkaidoId));
public bool IsValidOsztaly(int osztalyId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.OsztalyCsoport.OsztalyfonokHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), osztalyId));
public bool IsValidCsoport(int csoportId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.OsztalyCsoport.CsoportvezetoHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), csoportId));
public bool IsValidOsztalyCsoport(int osztalyCsoportId, bool lehetTTF = false)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.OsztalyCsoport.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), osztalyCsoportId, lehetTTF));
public bool IsValidOsztalyCsoport(int osztalyCsoportId, int tantargyId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.OsztalyCsoport.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), osztalyCsoportId, tantargyId));
public bool IsValidOsztalyfonokTanuloja(int tanuloId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Tanulo.OsztalyfonokHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), tanuloId));
public bool IsValidTanulo(int tanuloId, bool lehetTTF = false)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Tanulo.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), tanuloId, lehetTTF));
public bool IsValidTanulo(List<int> tanuloIdList, int osztalyCsoportId, bool lehetTTF = false)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Tanulo.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), tanuloIdList, osztalyCsoportId, lehetTTF));
public bool IsValidTanulo(int tanuloId, int tantargyId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Tanulo.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), tanuloId, tantargyId));
public bool IsValidErtekeles(int ertekelesId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Ertekeles.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), ertekelesId));
public bool IsValidMagatartasSzorgalom(int magatartasSzorgalomId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.MagatartasSzorgalom.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), magatartasSzorgalomId));
public bool IsValidMulasztas(int mulasztasId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Mulasztas.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), mulasztasId));
public bool IsValidIgazolas(int igazolasId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.Igazolas.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), igazolasId));
public bool IsValidKozossegiSzolgalat(int kozossegiSzolgalatId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.KozossegiSzolgalat.TanarHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), kozossegiSzolgalatId));
public bool IsValidErettsegiEredmeny(int erettsegiEredmenyId)
=> AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(()
=> AuthorizationHelper.ErettsegiEredmeny.OsztalyfonokHasAccess(ConnectionTypeExtensions.GetSessionConnectionType(), erettsegiEredmenyId));
#region Duális képzés
// TODO: Ezeket ki kell szedni, hogy és az IsValidDualisKepzes függvényt kell használni mindenhol!
// Ha esetleg előfordul, hogy egyedi autorizáció kell egyes felületeket, majd azoknak kell újat felvenni.
// Minden új esetében, ahol nincs egyedi autorizáció, ott a IsValidDualisKepzes függvényt használjuk!
public bool IsValidSzakkepzesiMunkaszerzodes() => IsValidDualisKepzes();
public bool IsValidDualisOktatoCsoporthozRendeles() => IsValidDualisKepzes();
public bool IsValidDualisTanulok() => IsValidDualisKepzes();
public bool IsValidDualisTanuloSorolas() => IsValidDualisKepzes();
public bool IsValidDualisAlkalmazottak() => IsValidDualisKepzes();
public bool IsValidDualisCsoportok() => IsValidDualisKepzes();
public bool IsValidDualisHelyszinek() => IsValidDualisKepzes();
public bool IsValidDualisErtekelesek() => IsValidDualisKepzes();
public bool IsValidDualisMulasztasok() => IsValidDualisKepzes();
public bool IsValidDualisFeljegyzesek() => IsValidDualisKepzes();
public bool IsValidTanulasiElemImportExport() => IsValidDualisOktato();
public bool IsValidTanulasiElemek() => IsValidDualisOktato();
public bool IsValidDualisKepzes() => IsDualisKepzesIsEnabled &&
ClaimData.IsSzakkepzoIntezmeny &&
ClaimData.IsSelectedTanev21_22OrLater &&
!ClaimData.IsDefaultAdminUser &&
(ClaimData.FelhasznaloSzerepkor == Enums.SzerepkorTipusEnum.Dualis_Admin ||
ClaimData.FelhasznaloSzerepkor == Enums.SzerepkorTipusEnum.Adminisztrator ||
ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.IsSzakiranyuOktatasertFelelos.ClaimValue));
public bool IsValidDualisOktato()
{
if (!IsDualisKepzesIsEnabled || !ClaimData.IsSelectedTanev21_22OrLater || !ClaimData.IsSzakkepzoIntezmeny || ClaimData.FelhasznaloSzerepkor != Enums.SzerepkorTipusEnum.Naplo)
{
return false;
}
var szervezetId = new SzervezetHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAlkalmazottSzervezetId(ClaimData.FelhasznaloId);
return szervezetId.IsEntityId();
}
private bool IsDualisKepzesIsEnabled => new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()).GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.DualisKepzes, IntezmenyConfigTipusEnum.IsEnabled);
public bool IsValidDualisAdminOrarend() => IsValidDualisKepzes();
public bool IsValidDualisElektronikusUzenetek() => IsValidDualisOktato();
public bool IsValidDualisBeirasok() => IsValidDualisOktato();
#endregion Duális képzés
public bool IsValidTanuloApaczai()
{
if (!ClaimData.IsSelectedTanev21_22OrLater)
{
return false;
}
var connection = ConnectionTypeExtensions.GetSessionConnectionType();
var tanuloHelper = new TanuloHelper(connection);
var tanuloApaczaiHelper = new TanuloApaczaiHelper(connection);
var apaczaiMenuVisibility = tanuloHelper.CheckApaczaiMenuVisibility(ClaimData.IsSelectedTanev20_21OrLater, ClaimData.IsSelectedTanev21_22OrLater);
try
{
var kgrClient = (IKGRClient)DependencyResolver.Current.GetService(typeof(IKGRClient));
var tanuloVanPalyazata = new TanuloApaczaiHelper(connection).GetPalyazat(kgrClient, ClaimData.FelhasznaloIdpEgyediAzonosito).Id > 0;
if (tanuloVanPalyazata)
{
return true;
}
else
{
var tanulonakVanElfogadottPalyazataMasikIntezmenyben = tanuloApaczaiHelper.HasElfogadottPalyazatMasikIntezmenyByOktatasiAzonosito(kgrClient, ClaimData.IntezmenyGuid.Value, ClaimData.FelhasznaloId);
var tanuloApaczaiSzerzodeses = tanuloHelper.GetTanuloiAdatok(ClaimData.FelhasznaloId, ClaimData.KovTanevID, ClaimData.IsSelectedTanev20_21OrLater, ClaimData.IsSelectedTanev21_22OrLater).IsApaczaiSzerzodeses;
return (tanuloApaczaiSzerzodeses && tanulonakVanElfogadottPalyazataMasikIntezmenyben) || apaczaiMenuVisibility;
}
}
catch (Exception ex)
{
return false;
}
var intezmenyConfigHelper = new IntezmenyConfigHelper(connection);
if (!intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.Apaczai, IntezmenyConfigTipusEnum.IsEnabled))
{
return false;
}
return apaczaiMenuVisibility;
}
private bool AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(Func<bool> action)
{
if (ClaimManager.HasPackage(KretaClaimPackages.Adminisztrator.ClaimValue))
{
return true;
}
if (ClaimManager.HasPackage(KretaClaimPackages.Naplo.ClaimValue))
{
if (ClaimManager.HasPackage(KretaClaimPackages.SzuperOsztalyfonok.ClaimValue))
{
return true;
}
return action();
}
return false;
}
}
}