init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
228
Kreta.BusinessLogic/Security/AuthenticationHelper.cs
Normal file
228
Kreta.BusinessLogic/Security/AuthenticationHelper.cs
Normal file
|
@ -0,0 +1,228 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Kreta.BusinessLogic.Classes;
|
||||
using Kreta.BusinessLogic.Helpers;
|
||||
using Kreta.Core.ConnectionType;
|
||||
using Kreta.Core.Logic;
|
||||
using Kreta.DataAccessManual;
|
||||
using Kreta.DataAccessManual.Interfaces;
|
||||
using Kreta.DataAccessManual.Util;
|
||||
using Kreta.Enums;
|
||||
using Kreta.Framework;
|
||||
using Kreta.Framework.Security;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Kreta.BusinessLogic.Security
|
||||
{
|
||||
public class AuthenticationHelper : LogicBase
|
||||
{
|
||||
public AuthenticationHelper(IConnectionType connectionType) : base(connectionType) { }
|
||||
|
||||
private const string TokenParameterName = "token";
|
||||
|
||||
public AuthenticationInfo GetAuthenticationInfo(LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
|
||||
{
|
||||
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
return GetAuthenticationInfo(dalHandler, loginInfo, intezmenyiDictionaryEnvironmentName);
|
||||
});
|
||||
}
|
||||
|
||||
private AuthenticationInfo GetAuthenticationInfo(IDalHandler dalHandler, LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
|
||||
{
|
||||
List<string> szerepkorok = GetSzerepkorok(dalHandler, loginInfo, intezmenyiDictionaryEnvironmentName);
|
||||
|
||||
return new AuthenticationInfo
|
||||
{
|
||||
InstituteCode = loginInfo.IntezmenyAzonosito.Replace("-eugyintezes", string.Empty),
|
||||
InstituteUserId = loginInfo.FelhasznaloId,
|
||||
InstituteUserUniqueId = loginInfo.FelhasznaloEgyediAzonosito,
|
||||
InstituteUserIdpUniqueId = loginInfo.FelhasznaloIdpEgyediAzonosito,
|
||||
TutelaryIdpUniqueId = loginInfo.GondviseloIdpEgyediAzonosito,
|
||||
TutelaryId = loginInfo.GondviseloId,
|
||||
TutelaryUniqueId = loginInfo.GondviseloEgyediAzonosito,
|
||||
SchoolYearId = loginInfo.AktivTanevId,
|
||||
SchoolYearUniqueId = loginInfo.AktivTanevEgyediAzonosito.HasValue ? loginInfo.AktivTanevEgyediAzonosito.ToString() : null,
|
||||
UserName = loginInfo.BelepesiNev,
|
||||
Name = loginInfo.GondviseloId.HasValue ? loginInfo.GondviseloNeve : loginInfo.NyomtatasiNev,
|
||||
Roles = NormalizeRoles(szerepkorok).ToArray(),
|
||||
EmailAddress = loginInfo.ElsodlegesEmailCim
|
||||
};
|
||||
}
|
||||
|
||||
public string CreateUrl(string baseUrl, string key, string intezmenyiDictionaryEnvironmentName)
|
||||
{
|
||||
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
AuthenticationInfo authenticationInfo = GetAuthenticationInfo(dalHandler, UserContext.Instance.LoginInfo, intezmenyiDictionaryEnvironmentName);
|
||||
|
||||
return CreateUrl(baseUrl, authenticationInfo, key);
|
||||
});
|
||||
}
|
||||
|
||||
private List<string> GetSzerepkorok(IDalHandler dalHandler, LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
|
||||
{
|
||||
List<string> szerepkorok = new List<string>();
|
||||
|
||||
var helper = new FelhasznaloHelper(new DalHandlerConnectionType(ConnectionType, dalHandler));
|
||||
Dictionary<SzerepkorTipusEnum, string> felhasznaloiSzerepkorok = helper.GetFelhasznaloiSzerepkorok(intezmenyiDictionaryEnvironmentName);
|
||||
|
||||
foreach (SzerepkorTipusEnum szerepkorTipus in felhasznaloiSzerepkorok.Keys)
|
||||
{
|
||||
szerepkorok.AddRange(helper.GetFelhasznaloiJogosultsagok(FelhasznaloId, (int)szerepkorTipus));
|
||||
}
|
||||
|
||||
if (loginInfo.GondviseloId.HasValue)
|
||||
{
|
||||
var isCsokkentettGondviselo = dalHandler.Felhasznalo().IsCsokkentettGondviselo(loginInfo.GondviseloId.Value, IntezmenyId, TanevId);
|
||||
if (isCsokkentettGondviselo)
|
||||
{
|
||||
// ha csökkentett gondviselő, akkor nem lehet semmilyen más joga!
|
||||
szerepkorok = new List<string> { KretaClaimPackages.CsokkentettGondviselo.ClaimValue };
|
||||
}
|
||||
else
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.Gondviselo.ClaimValue);
|
||||
|
||||
DataSet SZMKOsztalyok = dalHandler.EugyintezesDal().GetSZMKOsztalyok(loginInfo.GondviseloId.Value);
|
||||
if (SZMKOsztalyok.Tables[0].Rows.Count != 0)
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.SZMKKepviselo.ClaimValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var ds = dalHandler.Alkalmazott().GetInfoForLoginAlkalmazott(loginInfo.FelhasznaloId, loginInfo.SelectedTanevId);
|
||||
|
||||
if (ds.Tables[0].Rows.Count > 0)
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.Alkalmazott.ClaimValue);
|
||||
|
||||
var fokuszEnabled = new List<int> { (int)VezetoiOraszamokTipusEnum.Intezmenyvezeto, (int)VezetoiOraszamokTipusEnum.IntezmenyvezetoHelyettes };
|
||||
if (fokuszEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_VEZETOIORASZAMOK"])))
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.FokuszMonitoring.ClaimValue);
|
||||
}
|
||||
|
||||
var iskolaorEnabled = new List<int> { (int)MunkakorTipusEnum.iskolaor };
|
||||
if (iskolaorEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_MUNKAKORTIPUSA"])))
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.IskolaOr.ClaimValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (loginInfo.BelepesiNev.Equals(Core.Constants.SpecialUserName.KretaAdminisztratorUserName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
szerepkorok.Add(KretaClaimPackages.Alkalmazott.ClaimValue);
|
||||
}
|
||||
|
||||
return szerepkorok;
|
||||
}
|
||||
|
||||
private static string[] s_allowedRoles = new string[]
|
||||
{
|
||||
KretaClaimPackages.Adminisztrator.ClaimValue,
|
||||
|
||||
KretaClaimPackages.eUgyintezo.ClaimValue,
|
||||
KretaClaimPackages.Alairo.ClaimValue,
|
||||
|
||||
KretaClaimPackages.Penztaros.ClaimValue,
|
||||
KretaClaimPackages.PenzugyiAdmin.ClaimValue,
|
||||
KretaClaimPackages.BelepokartyaAdmin.ClaimValue,
|
||||
KretaClaimPackages.LeltarConcerned.ClaimValue,
|
||||
|
||||
KretaClaimPackages.Tanar.ClaimValue,
|
||||
KretaClaimPackages.Osztalyfonok.ClaimValue,
|
||||
|
||||
KretaClaimPackages.Tanulo.ClaimValue,
|
||||
|
||||
KretaClaimPackages.Gondviselo.ClaimValue,
|
||||
KretaClaimPackages.CsokkentettGondviselo.ClaimValue,
|
||||
KretaClaimPackages.SZMKKepviselo.ClaimValue,
|
||||
|
||||
KretaClaimPackages.EtkezesiAdmin.ClaimValue,
|
||||
KretaClaimPackages.EtkezesiEllenorzo.ClaimValue,
|
||||
|
||||
KretaClaimPackages.TeremberletJelenletEllenorzo.ClaimValue,
|
||||
KretaClaimPackages.Alkalmazott.ClaimValue,
|
||||
|
||||
KretaClaimPackages.IskolaEgeszsegugyiKoordinator.ClaimValue,
|
||||
KretaClaimPackages.Vedono.ClaimValue,
|
||||
KretaClaimPackages.Iskolaorvos.ClaimValue,
|
||||
KretaClaimPackages.IskolaEgeszsegugyiAsszisztens.ClaimValue,
|
||||
KretaClaimPackages.IskolaEgeszsegugyiLekerdezo.ClaimValue,
|
||||
|
||||
KretaClaimPackages.GazdasagiUgyintezo.ClaimValue,
|
||||
KretaClaimPackages.FokuszMonitoring.ClaimValue,
|
||||
|
||||
KretaClaimPackages.IskolaOr.ClaimValue,
|
||||
KretaClaimPackages.Konyvtaros.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_EsetKezelo.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_EszkozMenedzser.ClaimValue,
|
||||
KretaClaimPackages.KerdoivKitolto_KerdoivKezelo.ClaimValue,
|
||||
KretaClaimPackages.Dualis_Admin.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_EsetJovahagyo.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_EsetKozremukodo.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_Munkavegzo.ClaimValue,
|
||||
KretaClaimPackages.FELTAR_SzerzodesMenedzser.ClaimValue,
|
||||
};
|
||||
|
||||
private static List<string> NormalizeRoles(List<string> roles)
|
||||
{
|
||||
var normalizedRoles = new List<string>(roles);
|
||||
|
||||
//sajnos a Gondviselo megkapja a Tanulo-t is, ezt itt kivesszük (a rendes megoldás az lesz, hogy a Gondviselo nem kapja meg belépéskor a Tanulo-t)
|
||||
if (normalizedRoles.Contains(KretaClaimPackages.Gondviselo.ClaimValue))
|
||||
{
|
||||
normalizedRoles.Remove(KretaClaimPackages.Tanulo.ClaimValue);
|
||||
}
|
||||
|
||||
normalizedRoles = normalizedRoles.Where(role => s_allowedRoles.Contains(role)).Distinct().ToList();
|
||||
|
||||
return normalizedRoles;
|
||||
}
|
||||
|
||||
private static string CreateUrl(string baseUrl, AuthenticationInfo authenticationInfo, string key)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(baseUrl))
|
||||
{
|
||||
throw new ArgumentException(nameof(baseUrl));
|
||||
}
|
||||
|
||||
if (authenticationInfo == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(authenticationInfo));
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(key))
|
||||
{
|
||||
throw new ArgumentException(nameof(key));
|
||||
}
|
||||
|
||||
string token = JsonConvert.SerializeObject(authenticationInfo);
|
||||
string encryptedToken = UrlLogic.Encrypt(token, key);
|
||||
|
||||
var builder = new UriBuilder(baseUrl);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(builder.Query))
|
||||
{
|
||||
builder.Query = $"{TokenParameterName}={encryptedToken}";
|
||||
}
|
||||
else
|
||||
{
|
||||
NameValueCollection query = HttpUtility.ParseQueryString(builder.Query);
|
||||
query.Add(TokenParameterName, encryptedToken);
|
||||
|
||||
builder.Query = query.ToString();
|
||||
}
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue