Пример #1
0
        public static string Permissie(this HtmlHelper htmlHelper, Permissies permissies)
        {
            switch (permissies)
            {
            case Permissies.Geen:
                return("✕");

            case Permissies.Lezen:
                return("��");

            case Permissies.Bewerken:
                return("✎");

            default:
                return("WTF");
            }
        }
        /// <summary>
        /// Zoekt het gebruikersrecht op van <paramref name="persoon"/> op <paramref name="groep"/>. Als dat nog niet
        /// bestaat, maak er een aan. Voeg de gevraagde permissies toe. De vervaldatum wordt vervangen door de
        /// standaardvervaldatum op dit moment.
        /// </summary>
        /// <param name="persoon">Persoon die gebruikersrechten moet krijgen.</param>
        /// <param name="groep">Groep waarvoor de persoon gebruikersrechten moet krijgen.</param>
        /// <param name="persoonlijkeGegevens">Permissies op persoonlijke gegevens.</param>
        /// <param name="groepsGegevens">Permissies op de gegevens van de groep.</param>
        /// <param name="personenInAfdeling">Permissies op de leden in de eigen afdeling.</param>
        /// <param name="personenInGroep">Permissies op alle personen van de eigen groep.</param>
        public void ToekennenOfWijzigen(Persoon persoon, Groep groep, Permissies persoonlijkeGegevens, Permissies groepsGegevens,
                                        Permissies personenInAfdeling, Permissies personenInGroep)
        {
            var gebruikersRecht = persoon.GebruikersRechtV2.FirstOrDefault(gr => gr.Groep.Equals(groep));

            if (gebruikersRecht == null)
            {
                gebruikersRecht = new GebruikersRechtV2 {
                    Groep = groep, Persoon = persoon
                };
                groep.GebruikersRechtV2.Add(gebruikersRecht);
                persoon.GebruikersRechtV2.Add(gebruikersRecht);
            }

            gebruikersRecht.PersoonsPermissies  |= persoonlijkeGegevens;
            gebruikersRecht.GroepsPermissies    |= groepsGegevens;
            gebruikersRecht.AfdelingsPermissies |= personenInAfdeling;
            gebruikersRecht.IedereenPermissies  |= personenInGroep;
            gebruikersRecht.VervalDatum          = NieuweVervalDatum();
        }
        /// <summary>
        /// Levert de permissies op die de aangelogde gebruiker heeft op de gegeven
        /// <paramref name="gelieerdePersoon"/>.
        /// </summary>
        /// <param name="gelieerdePersoon">Gelieerde persoon met te checken permissies.</param>
        /// <returns>de permissies die de aangelogde gebruiker heeft op de gegeven
        /// <paramref name="gelieerdePersoon"/>.</returns>
        public Permissies PermissiesOphalen(GelieerdePersoon gelieerdePersoon)
        {
            Permissies result       = Permissies.Geen;
            int?       mijnAdNummer = _authenticatieMgr.AdNummerGet();

            Debug.Assert(mijnAdNummer.HasValue);

            if (gelieerdePersoon.Persoon.AdNummer == mijnAdNummer)
            {
                result = EigenPermissies(gelieerdePersoon.Persoon);
                if (result == Permissies.Bewerken)
                {
                    return(result);
                }
            }

            // Heb ik rechten op de groep van de gelieerde persoon?
            var relevantGebruikersRecht = (from gr in gelieerdePersoon.Groep.GebruikersRechtV2
                                           where gr.Persoon.AdNummer == mijnAdNummer && gr.VervalDatum != null && gr.VervalDatum > DateTime.Now
                                           select gr).FirstOrDefault();

            // Nee? Dan zijn we klaar.
            if (relevantGebruikersRecht == null)
            {
                return(result);
            }

            // Ik zit in de juiste groep. Ik krijg ook de permissies die ik op iedereen
            // in de groep heb.
            result |= relevantGebruikersRecht.IedereenPermissies;

            // Als ik al alle mogelijke permissies heb, of mijn permissies op mijn afdeling kunnen niets meer
            // veranderen, dan zijn we klaar.
            if (result == Permissies.Bewerken || (result | relevantGebruikersRecht.AfdelingsPermissies) == result)
            {
                return(result);
            }

            // Als gelieerdePersoon in dezelfde afdeling zit als ik, en die afdeling is van het huidige werkjaar,
            // dan zijn ook mijn afdelingspermissies relevant.
            var mijnGelieerdePersoon = (from gp in relevantGebruikersRecht.Persoon.GelieerdePersoon
                                        where gp.Groep.Equals(relevantGebruikersRecht.Groep)
                                        select gp).FirstOrDefault();

            if (mijnGelieerdePersoon == null)
            {
                // Ik ben niet gelieerd aan de groep, dus zit ik zeker niet in de juiste afdeling.
                return(result);
            }

            var huidigWerkjaar   = gelieerdePersoon.Groep.GroepsWerkJaar.OrderByDescending(gwj => gwj.WerkJaar).FirstOrDefault();
            var mijnAfdelingsIds =
                mijnGelieerdePersoon.Lid.Where(l => Equals(l.GroepsWerkJaar, huidigWerkjaar)).SelectMany(l => l.AfdelingIds);
            var zijnAfdelingsIds =
                gelieerdePersoon.Lid.Where(l => Equals(l.GroepsWerkJaar, huidigWerkjaar)).SelectMany(l => l.AfdelingIds);

            if (mijnAfdelingsIds.Any(afdid => zijnAfdelingsIds.Contains(afdid)))
            {
                result |= relevantGebruikersRecht.AfdelingsPermissies;
            }
            return(result);
        }