/// <summary>
        /// Haalt alle groepen op waarvoor <paramref name="ik"/> leesrechten heb op de gegeven
        /// <paramref name="aspecten"/>.
        /// </summary>
        /// <param name="ik">Persoon waarvoor de groepen opgehaald moeten worden.</param>
        /// <param name="aspecten">Aspecten waarvoor de persoon leesrechten moet hebben.</param>
        /// <returns>alle groepen op waarvoor <paramref name="ik"/> leesrechten heb op de gegeven
        /// <paramref name="aspecten"/>.</returns>
        public IEnumerable <Groep> ToegestaneGroepenOphalen(Persoon ik, SecurityAspect aspecten)
        {
            var gebruikersrechten =
                ik.GebruikersRechtV2.Where(gr => gr.VervalDatum != null & gr.VervalDatum > DateTime.Now);

            if (aspecten.HasFlag(SecurityAspect.PersoonlijkeGegevens))
            {
                gebruikersrechten = gebruikersrechten.Where(gr => gr.PersoonsPermissies.HasFlag(Permissies.Lezen));
            }
            if (aspecten.HasFlag(SecurityAspect.GroepsGegevens))
            {
                gebruikersrechten = gebruikersrechten.Where(gr => gr.GroepsPermissies.HasFlag(Permissies.Lezen));
            }
            if (aspecten.HasFlag(SecurityAspect.PersonenInAfdeling))
            {
                gebruikersrechten = gebruikersrechten.Where(gr => gr.AfdelingsPermissies.HasFlag(Permissies.Lezen));
            }
            if (aspecten.HasFlag(SecurityAspect.PersonenInGroep))
            {
                gebruikersrechten = gebruikersrechten.Where(gr => gr.IedereenPermissies.HasFlag(Permissies.Lezen));
            }
            return(gebruikersrechten.Select(gr => gr.Groep).Distinct());
        }
        /// <summary>
        /// Geeft weer welke effectieve permissie de aangelogde gebruiker heeft op de gegeven
        /// <paramref name="aspecten"/> van de gegeven <paramref name="groep"/>.
        /// </summary>
        /// <param name="groep">Groep waarvoor de permissies opgehaald moeten worden.</param>
        /// <param name="aspecten">Aspecten waarvoor permissies opgehaald moeten worden.</param>
        /// <returns>Permissies die de aangelogde gebruiker heeft op de gegeven
        /// <paramref name="aspecten"/> van de gegeven <paramref name="groep"/>.</returns>
        /// <remarks>
        /// (1) Als je meerdere aspecten combineert, krijg je de bitwise and van de permissies als
        ///     resultaat. D.w.z.: de permissies die je hebt op àlle meegegeven aspecten.
        /// (2) Als je rechten hebt op iedereen van je groep, dan heb je voor je afdeling minstens
        ///     diezelfde rechten.
        /// </remarks>
        public Permissies PermissiesOphalen(Groep groep, SecurityAspect aspecten)
        {
            int?adNummer        = _authenticatieMgr.AdNummerGet();
            var gebruikersRecht =
                groep.GebruikersRechtV2.FirstOrDefault(
                    gr => gr.Persoon.AdNummer == adNummer && gr.VervalDatum != null && gr.VervalDatum > DateTime.Now);

            if (gebruikersRecht == null)
            {
                return(Permissies.Geen);
            }

            var permissies = new List <Permissies>();

            // Dit is een tamelijk omslachtige procedure:
            // Voeg de permissies op ieder aspect uit 'aspecten' toe aan de lijst
            // 'permissies', en lever de bitwise and op.

            if (aspecten.HasFlag(SecurityAspect.PersoonlijkeGegevens))
            {
                permissies.Add(gebruikersRecht.PersoonsPermissies);
            }
            if (aspecten.HasFlag(SecurityAspect.GroepsGegevens))
            {
                permissies.Add(gebruikersRecht.GroepsPermissies);
            }
            if (aspecten.HasFlag(SecurityAspect.PersonenInAfdeling))
            {
                permissies.Add(gebruikersRecht.AfdelingsPermissies | gebruikersRecht.GroepsPermissies);
            }
            if (aspecten.HasFlag(SecurityAspect.PersonenInGroep))
            {
                permissies.Add(gebruikersRecht.IedereenPermissies);
            }

            return(permissies.Aggregate((x, y) => x & y));
        }
예제 #3
0
 public Permissies PermissiesOphalen(Groep groep, SecurityAspect aspecten)
 {
     return(Permissies.Bewerken);
 }
 public Permissies PermissiesOphalen(Groep groep, SecurityAspect aspecten)
 {
     throw new NotImplementedException();
 }