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));
            }
        }