private Response <bool> IsLoggedInUserEntitled(Bundles.AnsattInfo ansattInfo) { var loggedInUser = GetLoggedInUserAD(); if (AnsattHelper.IsUserSuper(loggedInUser)) { return(new Response <bool>(true, "User is testAdmin", Codes.Code.OK)); } Bundles.LederInfo[] lederListe = ansattInfo.Lederliste; // sjekk om det ble funnet ledere i AD, hvis ikke hent fra HRM if (lederListe == null || lederListe.Length <= 0) { var lederResponse = HRMHelper.FinnLedereForAnsatt(ansattInfo.Fornavn, ansattInfo.Etternavn, ansattInfo.AnsattNr); if (lederResponse.Success) { lederListe = lederResponse.Get(); } } // sjekk om innlogget bruker står som leder for den ansatte foreach (var leder in lederListe) { if (leder.AD.ToUpper().Equals(loggedInUser)) { return(new Response <bool>(true, "OK", Codes.Code.OK)); } } // sjekk om innlogget bruker er leders leder foreach (var leder in lederListe) { var lederResult = ADHelper.GetAnsattInfoForLeder(leder.AD); if (lederResult.Success) { var ledersLedere = HRMHelper.FinnLedereForAnsatt(lederResult.Get()); if (ledersLedere.Success) { foreach (var ledersLeder in ledersLedere.Get()) { if (ledersLeder.AD.ToUpper().Equals(loggedInUser)) { return(new Response <bool>(true, "OK", Codes.Code.OK)); } } } } else { return(new Response <bool>(false, lederResult.Message, Codes.Code.ERROR)); } } return(new Response <bool>(false, "Du står ikke som leder for denne ansatte", Codes.Code.ERROR)); }
public ActionResult VelgDokument(string identifikator) { ViewBag.Message = $"Logget inn som {User.Identity.Name}"; Response <Bundles.AnsattInfo> ansattResponse; ViewBag.DocID = Session["docID"]; if (identifikator.Equals("-1")) { ViewBag.Ansattnr = identifikator; ansattResponse = new Response <Bundles.AnsattInfo>(Bundles.AnsattInfo.Skipped, null, Codes.Code.OK); return(Success(ansattResponse.Get())); } else if (identifikator.StartsWith("!") && AnsattHelper.IsUserSuper(GetLoggedInUserAD())) { // testbrukere var ansattnr = identifikator.Substring(1, identifikator.Length - 1); ansattResponse = AnsattHelper.GetTestUser(ansattnr, GetLoggedInUserAD()); ViewBag.Ansattnr = ansattnr; } else if (identifikator.Contains("@")) // anta e-postadresse { ansattResponse = ADHelper.GetADBrukerForEpost(identifikator); } else if (long.TryParse(identifikator, out long idNummer)) // et nummer - altså ansattnr. eller personnr. { if (idNummer > 99999) { ansattResponse = HRMHelper.FinnAnsatt(identifikator); } else { ansattResponse = ADHelper.GetADBruker((int)idNummer); } } else { return(Failure(Codes.Code.ERROR, $"Ugyldig identifikator oppgitt: '{identifikator}'")); } if (ansattResponse.Success) { var ansatt = ansattResponse.Get(); var authResult = IsLoggedInUserEntitled(ansatt); if (authResult.Get()) { return(Success(ansatt)); } else { // Gjør oppslag i HRM for å finne alle ledere for denne ansatte var lederResponse = HRMHelper.FinnLedereForAnsatt(ansatt.Fornavn, ansatt.Etternavn, ansatt.AnsattNr); if (lederResponse.Success) { ansatt.Lederliste = lederResponse.Get(); authResult = IsLoggedInUserEntitled(ansatt); if (authResult.Success) { if (authResult.Get()) { return(Success(ansatt)); } else { return(Failure(authResult.Code, authResult.Message)); } } else { return(Failure(authResult.Code, authResult.Message)); } } else { return(Failure(authResult.Code, authResult.Message)); } } } else { return(Failure(ansattResponse.Code, ansattResponse.Message)); } }