using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Security.Claims; using System.Security.Principal; using System.Web; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Security; using Kreta.Core.ConnectionType; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Security; using Kreta.KretaServer.SystemSettings; using Microsoft.AspNet.Identity; using Microsoft.Owin.Security; using Newtonsoft.Json; namespace Kreta.Web.Security { public class ClaimManager { public static event ClaimSigninEventHandler ClaimSignin; public static ClaimsIdentity SignIn(LoginInfo loginInfo, bool idpLoginEnabled = false) { var claims = new List(); claims.Add(new Claim(KretaClaimTypes.BelepesiNev, loginInfo.BelepesiNev)); claims.Add(new Claim(KretaClaimTypes.FelhasznaloNev, loginInfo.NyomtatasiNev)); claims.Add(new Claim(KretaClaimTypes.FelhasznaloId, loginInfo.FelhasznaloId.ToString())); claims.Add(new Claim(KretaClaimTypes.SessionId, loginInfo.SessionID)); claims.Add(new Claim(KretaClaimTypes.AntiForgeryToken, Guid.NewGuid().ToString())); if (loginInfo.GondviseloId.HasValue) { claims.Add(new Claim(KretaClaimTypes.GondviseloId, loginInfo.GondviseloId.Value.ToString())); if (loginInfo.UtolsoBelepesIdeje == null) { new JelszoLinkHelper(new OrganizationConnectionType(loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId), loginInfo.GondviseloId.Value).DeleteLink(); } } claims.Add(new Claim(KretaClaimTypes.KretaFelhasznaloSzerepkor, nameof(SzerepkorTipusEnum.Nincs_beallitva))); DoClaimSigninEvent(claims, loginInfo); var identity = new ClaimsIdentity(new GenericIdentity($"{loginInfo.BelepesiNev ?? string.Empty}/{loginInfo.IntezmenyAzonosito ?? string.Empty}"), claims, DefaultAuthenticationTypes.ApplicationCookie, null, null); if (!idpLoginEnabled) { var authmgr = HttpContext.Current.Request.GetOwinContext().Authentication; authmgr.SignIn(identity); } return identity; } public static bool GetStatusClaimSigninEvent() { return ClaimSignin != null; } private static void DoClaimSigninEvent(List claims, LoginInfo logininfo) { ClaimSignin?.Invoke(null, new ClaimSigninEventArgs(claims, logininfo)); } public static void SignOut() { var authmgr = HttpContext.Current.Request.GetOwinContext().Authentication; var identity = GetClaimIdentity(); RemoveClaim(identity, KretaClaimTypes.Package); RemoveClaim(identity, KretaClaimTypes.PackageCacheHash); authmgr.SignOut(); } /// /// Belépett felhasználóhoz tartozó összes jogosultság (claimek) lekérdezése DB-ből. Pl: Osztályfőnök, Csoportvezető, stb. /// /// private static List GetUserClaims(FelhasznaloHelper helper) { var userclaims = new List(); userclaims.AddRange(helper.GetFelhasznaloiJogosultsagok(ClaimData.FelhasznaloId, (int)ClaimData.FelhasznaloSzerepkor)); return userclaims; } private static List GetFelhasznaloResources(SzerepkorTipusEnum szerepkor) { var resourceList = new List(); if (szerepkor == SzerepkorTipusEnum.Ellenorzo) { if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.A_felhasznalok_nem_valtoztathatjak_meg_a_jelszavukat_az_elektronikus_ellenorzoben, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Ellenorzo.Resources.A_felhasznalok_nem_valtoztathatjak_meg_a_jelszavukat_az_elektronikus_ellenorzoben); } } if (ClaimData.IsOsztalyfonok) { if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_modosithatja_osztalyaba_jaro_tanulok_adatait, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_modosithatja_osztalyaba_jaro_tanulok_adatait); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_szocialis_tanugyi_es_SNI_BTM_adatait, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_szocialis_tanugyi_es_SNI_BTM_adatait); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_kezelheti_az_osztalyaba_jaro_tanulok_vallasi_adatait, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_megtekintheti_kezelheti_az_osztalyaba_jaro_tanulok_vallasi_adatait); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_sportoloi_adatait, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_megtekintheti_kezelheti_az_osztalyaba_jaro_tanulok_sportoloi_adatait); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_zaradekat, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_zaradekat); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_kiegeszitheti_osztalyaba_jaro_tanulok_ki_vagy_atsorolsasi_zaradekat, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Osztalyfonok.Resources.Osztalyfonok_kiegeszitheti_osztalyaba_jaro_tanulok_vegzaradekat); } } if (ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.TanuloKezelese.ClaimValue)) { if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Tanulo_sajatos_nevelesi_igenyenek_szocialis_es_tanugyi_adatainak_kezelese, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.TanuloKezelese.Resources.Tanulo_sajatos_nevelesi_igenyenek_szocialis_es_tanugyi_adatainak_kezelese); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Tanulo_vallasi_adatainak_kezelese, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.TanuloKezelese.Resources.Tanulo_vallasi_adatainak_kezelese); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Tanulo_sportoloi_adatainak_kezelese, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.TanuloKezelese.Resources.Tanulo_sportoloi_adatainak_kezelese); } } if (ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.Tanar.ClaimValue)) { if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Pedagogusok_sajat_orarendjeiket_modosithatjak_az_elektronikus_naploban, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Tanar.Resources.Pedagogusok_sajat_orarendjeiket_modosithatjak_az_elektronikus_naploban); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Pedagogusok_csak_az_eloirt_helyettesiteseiket_regisztralhatjak_a_haladasi_naploban, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Tanar.Resources.Pedagogusok_csak_az_eloirt_helyettesiteseiket_regisztralhatjak_a_haladasi_naploban); } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.A_haladasi_naploba_orankent_csak_egy_tanora_rogzitheto, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { resourceList.Add(KretaClaimPackages.Tanar.Resources.A_haladasi_naploba_orankent_csak_egy_tanora_rogzitheto); } } return resourceList; } /// /// Jogosultság beállítása. /// /// public static void SetFelhasznaloSzerepkorClaim(List szerepkorok, List eugyintezesESLSzerepkorok = null) { var connectionType = new SessionConnectionType(ClaimData.SessionId, ClaimData.FelhasznaloId, ClaimData.IntezmenyId, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value); if (szerepkorok.Any()) { AddClaim(KretaClaimTypes.KretaFelhasznaloSzerepkor, szerepkorok[0].ToString()); } var felhasznaloHelper = new FelhasznaloHelper(connectionType); List claims = GetUserClaims(felhasznaloHelper); if (ClaimData.IsDefaultAdminUser && SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Is_Csokkentett_Admin_Jog, ClaimData.IntezmenyAzonosito, ClaimData.SelectedTanevID.Value)) { claims = new List { KretaClaimPackages.IsCsokkentettAdminJog.ClaimValue }; string temp = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, temp); return; } if (ClaimData.GondviseloId.HasValue) { var isCsokkentettGondviselo = felhasznaloHelper.IsCsokkentettGondviselo(ClaimData.GondviseloId.Value); if (isCsokkentettGondviselo) { // ha csökkentett gondviselő, akkor nem lehet semmilyen más joga! claims = new List { KretaClaimPackages.CsokkentettGondviselo.ClaimValue }; string temp = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, temp); return; } claims.Add(KretaClaimPackages.Gondviselo.ClaimValue); //ToDo: bool-t adjon vissza! DataSet SZMKOsztalyok = new OsztalyHelper(connectionType).GetSZMKOsztalyok(ClaimData.GondviseloId.Value); if (SZMKOsztalyok.Tables[0].Rows.Count != 0) { claims.Add(KretaClaimPackages.SZMKKepviselo.ClaimValue); } } if (ClaimData.FeltarGondviseloEnabled) { AddIsFeltaGondviseloOrTanuloClaimPackegeIfNeeded(connectionType, claims); } //ToDo: átszervezni! if (eugyintezesESLSzerepkorok?.Count > 0) { eugyintezesESLSzerepkorok.ForEach(x => { if (nameof(SzerepkorTipusEnum.eUgyintezo) == x.ToString()) { claims.Add(KretaClaimPackages.eUgyintezo.ClaimValue); } if (nameof(SzerepkorTipusEnum.Alairo) == x.ToString()) { claims.Add(KretaClaimPackages.Alairo.ClaimValue); } if (nameof(SzerepkorTipusEnum.Penztaros) == x.ToString()) { claims.Add(KretaClaimPackages.Penztaros.ClaimValue); } if (nameof(SzerepkorTipusEnum.PenzugyiAdmin) == x.ToString()) { claims.Add(KretaClaimPackages.PenzugyiAdmin.ClaimValue); } if (nameof(SzerepkorTipusEnum.BelepokartyaAdmin) == x.ToString()) { claims.Add(KretaClaimPackages.BelepokartyaAdmin.ClaimValue); } if (nameof(SzerepkorTipusEnum.LeltarConcerned) == x.ToString()) { claims.Add(KretaClaimPackages.LeltarConcerned.ClaimValue); } if (nameof(SzerepkorTipusEnum.EtkezesiAdmin) == x.ToString()) { claims.Add(KretaClaimPackages.EtkezesiAdmin.ClaimValue); } if (nameof(SzerepkorTipusEnum.EtkezesiEllenorzo) == x.ToString()) { claims.Add(KretaClaimPackages.EtkezesiEllenorzo.ClaimValue); } if (nameof(SzerepkorTipusEnum.TeremberletJelenletEllenorzo) == x.ToString()) { claims.Add(KretaClaimPackages.TeremberletJelenletEllenorzo.ClaimValue); } if (nameof(SzerepkorTipusEnum.alkalmazott) == x.ToString()) { claims.Add(KretaClaimPackages.Alkalmazott.ClaimValue); } if (nameof(SzerepkorTipusEnum.FokuszMonitoring) == x.ToString()) { claims.Add(KretaClaimPackages.FokuszMonitoring.ClaimValue); } }); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.GazdasagiUgyintezo)) { claims.Add(KretaClaimPackages.GazdasagiUgyintezo.ClaimValue); if (ClaimData.IsKlebelsberg) { claims.Add(KretaClaimPackages.KKGazdasagiUgyintezo.ClaimValue); } } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.IskolaEgeszsegugyiKoordinator)) { claims.Add(KretaClaimPackages.IskolaEgeszsegugyiKoordinator.ClaimValue); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Vedono)) { claims.Add(KretaClaimPackages.Vedono.ClaimValue); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Iskolaorvos)) { claims.Add(KretaClaimPackages.Iskolaorvos.ClaimValue); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Konyvtaros)) { var helper = new IntezmenyConfigHelper(connectionType); if (helper.GetIntezmenyConfig(IntezmenyConfigModulEnum.Konyvtar, IntezmenyConfigTipusEnum.IsEnabled) && !ClaimData.GondviseloId.HasValue) { claims.Add(KretaClaimPackages.Konyvtaros.ClaimValue); } } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.IskolaEgeszsegugyiAsszisztens)) { claims.Add(KretaClaimPackages.IskolaEgeszsegugyiAsszisztens.ClaimValue); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.IskolaEgeszsegugyiLekerdezo)) { claims.Add(KretaClaimPackages.IskolaEgeszsegugyiLekerdezo.ClaimValue); } if (ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.KerdoivKitolto_KerdoivKezelo)) { claims.Add(KretaClaimPackages.KerdoivKitolto_KerdoivKezelo.ClaimValue); } if (ClaimData.IsSzakkepzoIntezmeny && ClaimData.FelhasznaloSzerepkorok.ContainsKey(SzerepkorTipusEnum.Dualis_Admin)) { claims.Add(KretaClaimPackages.Dualis_Admin.ClaimValue); } if (ClaimData.IsDefaultAdminUser) { claims.Add(KretaClaimPackages.IsDefaultAdminUser.ClaimValue); } List isModosithatjaOsztfoMulasztasokatJogosultak = new List { KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.CsoportVezeto.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue }; if (claims.Intersect(isModosithatjaOsztfoMulasztasokatJogosultak).Any() && SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyfonok_Modosithatjae_Tanulok_Mulasztasi_Adatait, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value)) { claims.Add(KretaClaimPackages.IsModosithatjaOsztfoMulasztasokat.ClaimValue); } var systemSettingsHelper = new SystemSettingsHelper(connectionType); AddTanarAdhatMagatartasSzorgalomJegyetClaimPackegeIfNeeded(systemSettingsHelper, claims); var tanarHelper = new TanarHelper(connectionType); AddFelhasznaloMunkakoreNemTiltoListasClaimPackegeIfNeeded(systemSettingsHelper, tanarHelper, claims); AddEllenorzobenLathatoOsztalyatlagClaimPackegeIfNeeded(systemSettingsHelper, claims); var alkalmazottHelper = new AlkalmazottHelper(connectionType); AddLEPClaimPackegeIfNeeded(systemSettingsHelper, alkalmazottHelper, claims); bool isVegzosEvfolyamTanuloja; isVegzosEvfolyamTanuloja = felhasznaloHelper.GetVegzosEvfolyamTanulojaByUserId(ClaimData.FelhasznaloId); var pedagogusok_sajat_orarendjeiket_modosithatjak_az_elektronikus_naploban = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Pedagogusok_sajat_orarendjeiket_modosithatjak_az_elektronikus_naploban); if (pedagogusok_sajat_orarendjeiket_modosithatjak_az_elektronikus_naploban && claims.Contains(KretaClaimPackages.Naplo.ClaimValue)) { claims.Add(KretaClaimPackages.TanarOrarendSzerkesztes.ClaimValue); } if (claims.Contains(KretaClaimPackages.Ellenorzo.ClaimValue)) { var felevi_jegyek_megjelenesenek_datuma = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Felevi_jegyek_megjelenesenek_datuma); var ev_vegi_jegyek_megjelenesenek_datuma = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Ev_vegi_jegyek_megjelenesenek_datuma); var ev_vegi_jegyek_megjelenesenek_datuma_vegzos = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Ev_vegi_jegyek_megjelenesenek_datuma_vegzos); if (felevi_jegyek_megjelenesenek_datuma <= DateTime.Now) { claims.Add(KretaClaimPackages.FeleviJegy.ClaimValue); } if (ev_vegi_jegyek_megjelenesenek_datuma <= DateTime.Now && !isVegzosEvfolyamTanuloja) { claims.Add(KretaClaimPackages.EvvegiJegy.ClaimValue); } if (ev_vegi_jegyek_megjelenesenek_datuma_vegzos <= DateTime.Now && isVegzosEvfolyamTanuloja) { claims.Add(KretaClaimPackages.EvvegiVegzosJegy.ClaimValue); } } var ds = alkalmazottHelper.GetInfoForLoginAlkalmazott(); if (ds.Tables[0].Rows.Count > 0) { claims.Add(KretaClaimPackages.Alkalmazott.ClaimValue); if (SDAConvert.ToBooleanFromTF(ds.Tables[0].Rows[0]["C_DIAKOLIMPIA"])) { claims.Add(KretaClaimPackages.DiakolimpiaKezelo.ClaimValue); } var fokuszEnabled = new List { (int)VezetoiOraszamokTipusEnum.Intezmenyvezeto, (int)VezetoiOraszamokTipusEnum.IntezmenyvezetoHelyettes }; if (fokuszEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_VEZETOIORASZAMOK"]))) { claims.Add(KretaClaimPackages.FokuszMonitoring.ClaimValue); } var iskolaorEnabled = new List { (int)MunkakorTipusEnum.iskolaor }; if (iskolaorEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_MUNKAKORTIPUSA"]))) { claims.Add(KretaClaimPackages.IskolaOr.ClaimValue); } if (SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_MUNKAKORTIPUSA"]) == (int)MunkakorTipusEnum.portas) { claims.Add(KretaClaimPackages.IsPortas.ClaimValue); } if (ClaimData.IsSelectedTanev20_21OrLater && ClaimData.IsSzakkepzoIntezmeny && SDAConvert.ToBooleanFromTF(ds.Tables[0].Rows[0]["C_ISSZAKOKTATASERTFELELOS"])) { claims.Add(KretaClaimPackages.IsSzakiranyuOktatasertFelelos.ClaimValue); } if (ClaimData.IsSelectedTanev20_21OrLater && ClaimData.IsSzakkepzoIntezmeny && SDAConvert.ToBooleanFromTF(ds.Tables[0].Rows[0]["C_ISDUALISKEPZOHELYIOKTATO"])) { claims.Add(KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue); } var naploSzerepkoros = ClaimData.FelhasznaloSzerepkorok.Any(x => x.Key == SzerepkorTipusEnum.Naplo); var adminSzerepkoros = ClaimData.FelhasznaloSzerepkorok.Any(x => x.Key == SzerepkorTipusEnum.Adminisztrator); var feltarEszkozMenedzserSzerepkoros = ClaimData.FelhasznaloSzerepkorok.Any(x => x.Key == SzerepkorTipusEnum.FELTAR_EszkozMenedzser); if (ClaimData.FeltarAlkalmazottEnabled && (naploSzerepkoros || (adminSzerepkoros && feltarEszkozMenedzserSzerepkoros))) { claims.Add(KretaClaimPackages.IsFeltarAlkalmazott.ClaimValue); } } var feladatKategoriaList = new FeladatEllatasiHelyHelper(connectionType).GetFeladatKategoriakForLogin(ClaimData.AktivTanevID.Value, ClaimData.KovTanevID); if (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue) && feladatKategoriaList.Contains(OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas)) { claims.Add(KretaClaimPackages.AMImodul.ClaimValue); } if (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue) && feladatKategoriaList.Contains(OktNevelesiKategoriaEnum.Kollegium)) { claims.Add(KretaClaimPackages.KollegiumModul.ClaimValue); } if (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue) && feladatKategoriaList.Contains(OktNevelesiKategoriaEnum.Felnottkepzes)) { claims.Add(KretaClaimPackages.FelnottkepzesModul.ClaimValue); } if (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue) && feladatKategoriaList.Contains(OktNevelesiKategoriaEnum.EGYMI)) { claims.Add(KretaClaimPackages.EGYMIModul.ClaimValue); } claims.Add(KretaClaimPackages.TanuloKezelese.ClaimValue); //Egyelőre alapból megkapja mindenki a "TanuloKezelese" package-et string claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); AddClaim(KretaClaimTypes.PackageCacheHash, claimsString.GetHashCode().ToString()); var resources = szerepkorok.Any() ? GetFelhasznaloResources(szerepkorok[0]) : new List(); AddClaim(KretaClaimTypes.Resource, JsonConvert.SerializeObject(resources)); if (!ClaimData.IsNaploAdministrator && alkalmazottHelper.IsKozossegiSzolgalatKezelo()) { claims.Add(KretaClaimPackages.IsKozossegiSzolgalatKezelo.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } if (!claims.Contains(KretaClaimPackages.Tanulo.ClaimValue) && !claims.Contains(KretaClaimPackages.Gondviselo.ClaimValue) && !claims.Contains(KretaClaimPackages.CsokkentettGondviselo.ClaimValue)) { claims.Add(KretaClaimPackages.TavolletIgenylo.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } IntezmenyCO intezmenyiAdatok = new IntezmenyHelper(connectionType).GetIntezmenyiAdatok(); if (intezmenyiAdatok.IsCsakLepKezelo) { if (!claims.Contains(KretaClaimPackages.IsLEPKezelo.ClaimValue)) { claims.Add(KretaClaimPackages.IsLEPKezelo.ClaimValue); } claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); AddClaim(KretaClaimTypes.CsokkentettTanuloLEP, System.IO.File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath(@"~\Configuration\CsokkentettTanuloLEPJson.json"))); } if (ClaimData.IsOnlyAlkalmazott) { claims.Add(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } if (ClaimData.IsSzirIntezmeny) { claims.Add(KretaClaimPackages.IsSzirIntezmeny.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } if (ClaimData.IsSzakkepzoIntezmeny) { claims.Add(KretaClaimPackages.IsSzakkepzoIntezmeny.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } if (ClaimData.IsArchivIntezmeny) { if (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue)) { ClaimData.IsArchivAdminUser = true; } //Semmilyen másik Claim-je nem lehet ilyenkor claims.Clear(); claims.Add(KretaClaimPackages.IsArchivIntezmeny.ClaimValue); claimsString = JsonConvert.SerializeObject(claims); AddClaim(KretaClaimTypes.Package, claimsString); } } public static void AddClaim(string claimType, string claimValue) { var identity = GetClaimIdentity(); AddClaimToIdentity(identity, claimType, claimValue); } public static void AddClaim(ClaimsIdentity identity, string claimType, string claimValue) { AddClaimToIdentity(identity, claimType, claimValue); } private static void AddClaimToIdentity(ClaimsIdentity identity, string claimType, string claimValue) { if (!identity.IsAuthenticated) return; RemoveClaim(identity, claimType); if (claimValue == null) return; identity.AddClaim(new Claim(claimType, claimValue)); var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(new ClaimsPrincipal(identity), new AuthenticationProperties() { IsPersistent = false }); // ha IsPersistent true akkor belépve marad a felhasználó } private static void RemoveClaim(ClaimsIdentity identity, string claimType) { var claims = identity.FindClaims(claimType); foreach (var tipus in claims) { identity.RemoveClaim(tipus); } } public static ClaimsIdentity GetClaimIdentity() { return HttpContext.Current.User.Identity as ClaimsIdentity; } public static bool HasPackage(params string[] values) { var packages = ClaimData.FelhasznaloSzerepCsomagok; bool result = false; foreach (string value in values) { if (packages.Contains(value)) { result = true; break; } } return result; } private static void AddTanarAdhatMagatartasSzorgalomJegyetClaimPackegeIfNeeded(SystemSettingsHelper systemSettingsHelper, List claims) { var tanarAdhatMagatartasSzorgalomJegyet = !systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Magatartas_Szorgalom_Ertekeles_Csak_Ofokent); if (tanarAdhatMagatartasSzorgalomJegyet && claims.Contains(KretaClaimPackages.Tanar.ClaimValue) && !claims.Contains(KretaClaimPackages.Osztalyfonok.ClaimValue) && !claims.Contains(KretaClaimPackages.SzuperOsztalyfonok.ClaimValue)) //Ofőknek másképp { claims.Add(KretaClaimPackages.TanarAdhatMagatartasSzorgalomJegyet.ClaimValue); } } private static void AddLEPClaimPackegeIfNeeded(SystemSettingsHelper systemSettingsHelper, AlkalmazottHelper helper, List claims) { var IsLEPKezelo = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Lazar_Ervin_Program_kezelese); if (IsLEPKezelo && (claims.Contains(KretaClaimPackages.Adminisztrator.ClaimValue) || claims.Contains(KretaClaimPackages.Szuperadmin.ClaimValue) || claims.Contains(KretaClaimPackages.SzuperOsztalyfonok.ClaimValue) || claims.Contains(KretaClaimPackages.Osztalyfonok.ClaimValue) || helper.IsLEPKezelo())) { claims.Add(KretaClaimPackages.IsLEPKezelo.ClaimValue); } } private static void AddFelhasznaloMunkakoreNemTiltoListasClaimPackegeIfNeeded(SystemSettingsHelper systemSettingsHelper, TanarHelper tanarHelper, List claims) { var tiltottMunkakorok = systemSettingsHelper.GetSystemSettingValue>(RendszerBeallitasTipusEnum.Alkalmazottak_lathatjak_a_diakok_adatait); if (claims.Contains(KretaClaimPackages.Tanar.ClaimValue)) { var tanarAdatok = tanarHelper.GetTanarAdatok(ClaimData.FelhasznaloId); if (!tanarAdatok.MunkaKor.HasValue || tiltottMunkakorok.Count == 0 || !tiltottMunkakorok.Contains(tanarAdatok.MunkaKor.Value)) { claims.Add(KretaClaimPackages.FelhasznaloMunkakoreNemTiltoListas.ClaimValue); } } } private static void AddEllenorzobenLathatoOsztalyatlagClaimPackegeIfNeeded(SystemSettingsHelper systemSettingsHelper, List claims) { var ellenorzobenLathatoOsztalyatlag = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osztalyatlag_megjelenitese_az_ellenorzo_feluleten); if (ellenorzobenLathatoOsztalyatlag && claims.Contains(KretaClaimPackages.Ellenorzo.ClaimValue)) { claims.Add(KretaClaimPackages.EllenorzobenLathatoOsztalyatlag.ClaimValue); } } private static void AddIsFeltaGondviseloOrTanuloClaimPackegeIfNeeded(SessionConnectionType connectionType, List claims) { if (claims.Contains(KretaClaimPackages.Gondviselo.ClaimValue) && ClaimData.GondviseloId.HasValue && new GondviseloHelper(connectionType).IsGondviseloTanuloinakEvfolyamTipusaLetezik(ClaimData.GondviseloId.Value, Core.Constants.FeltarEvfolyamList)) { claims.Add(KretaClaimPackages.IsFeltarGondviselo.ClaimValue); } else if (claims.Contains(KretaClaimPackages.Tanulo.ClaimValue) && new TanuloHelper(connectionType).IsTanuloFeltarEvfolyamos()) { claims.Add(KretaClaimPackages.IsFeltarTanulo.ClaimValue); } } } public delegate void ClaimSigninEventHandler(object sender, ClaimSigninEventArgs e); public class ClaimSigninEventArgs : EventArgs { public ClaimSigninEventArgs(List claims, LoginInfo loginInfo) { Claims = claims; LoginInfo = loginInfo; } public List Claims { get; set; } public LoginInfo LoginInfo { get; set; } } }