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 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(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(IntezmenyConfigModulEnum.Apaczai, IntezmenyConfigTipusEnum.IsEnabled)) { return false; } return apaczaiMenuVisibility; } private bool AdminVagySzuperOsztalyfonokJogosultasagEllenorzes(Func 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; } } }