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

675 lines
33 KiB
C#

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<Claim>();
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<Claim> 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();
}
/// <summary>
/// Belépett felhasználóhoz tartozó összes jogosultság (claimek) lekérdezése DB-ből. Pl: Osztályfőnök, Csoportvezető, stb.
/// </summary>
/// <returns></returns>
private static List<string> GetUserClaims(FelhasznaloHelper helper)
{
var userclaims = new List<string>();
userclaims.AddRange(helper.GetFelhasznaloiJogosultsagok(ClaimData.FelhasznaloId, (int)ClaimData.FelhasznaloSzerepkor));
return userclaims;
}
private static List<string> GetFelhasznaloResources(SzerepkorTipusEnum szerepkor)
{
var resourceList = new List<string>();
if (szerepkor == SzerepkorTipusEnum.Ellenorzo)
{
if (SystemSettingsManager.GetSystemSettingValue<bool>(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<bool>(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<bool>(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<bool>(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<bool>(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<bool>(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<bool>(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<bool>(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<bool>(RendszerBeallitasTipusEnum.Tanulo_vallasi_adatainak_kezelese, ClaimData.IntezmenyAzonosito, ClaimData.AktivTanevID.Value))
{
resourceList.Add(KretaClaimPackages.TanuloKezelese.Resources.Tanulo_vallasi_adatainak_kezelese);
}
if (SystemSettingsManager.GetSystemSettingValue<bool>(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<bool>(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<bool>(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<bool>(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;
}
/// <summary>
/// Jogosultság beállítása.
/// </summary>
/// <param name="szerepkor"></param>
public static void SetFelhasznaloSzerepkorClaim(List<SzerepkorTipusEnum> szerepkorok, List<SzerepkorTipusEnum> 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<string> claims = GetUserClaims(felhasznaloHelper);
if (ClaimData.IsDefaultAdminUser && SystemSettingsManager.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Is_Csokkentett_Admin_Jog, ClaimData.IntezmenyAzonosito, ClaimData.SelectedTanevID.Value))
{
claims = new List<string> { 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<string> { 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<bool>(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<string> isModosithatjaOsztfoMulasztasokatJogosultak = new List<string>
{
KretaClaimPackages.Osztalyfonok.ClaimValue,
KretaClaimPackages.SzuperOsztalyfonok.ClaimValue,
KretaClaimPackages.CsoportVezeto.ClaimValue,
KretaClaimPackages.Evfolyamfelelos.ClaimValue
};
if (claims.Intersect(isModosithatjaOsztfoMulasztasokatJogosultak).Any()
&& SystemSettingsManager.GetSystemSettingValue<bool>(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<bool>(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<DateTime?>(RendszerBeallitasTipusEnum.Felevi_jegyek_megjelenesenek_datuma);
var ev_vegi_jegyek_megjelenesenek_datuma = systemSettingsHelper.GetSystemSettingValue<DateTime?>(RendszerBeallitasTipusEnum.Ev_vegi_jegyek_megjelenesenek_datuma);
var ev_vegi_jegyek_megjelenesenek_datuma_vegzos = systemSettingsHelper.GetSystemSettingValue<DateTime?>(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> { (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> { (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<string>();
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<string> claims)
{
var tanarAdhatMagatartasSzorgalomJegyet = !systemSettingsHelper.GetSystemSettingValue<bool>(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<string> claims)
{
var IsLEPKezelo = systemSettingsHelper.GetSystemSettingValue<bool>(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<string> claims)
{
var tiltottMunkakorok = systemSettingsHelper.GetSystemSettingValue<List<int>>(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<string> claims)
{
var ellenorzobenLathatoOsztalyatlag = systemSettingsHelper.GetSystemSettingValue<bool>(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<string> 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<Claim> claims, LoginInfo loginInfo)
{
Claims = claims;
LoginInfo = loginInfo;
}
public List<Claim> Claims { get; set; }
public LoginInfo LoginInfo { get; set; }
}
}