Ejemplo n.º 1
0
        private static IList <NavBE> FilterDisallowedNavRecords(IList <NavBE> navPages)
        {
            Dictionary <ulong, NavBE> pagesToCheck = new Dictionary <ulong, NavBE>();
            List <NavBE> allowedPages    = new List <NavBE>(navPages.Count);
            Permissions  userPermissions = PermissionsBL.GetUserPermissions(DekiContext.Current.User);

            foreach (NavBE np in navPages)
            {
                ulong effectivePageRights = PermissionsBL.CalculateEffectivePageRights(new PermissionStruct((ulong)userPermissions, np.RestrictionFlags ?? ulong.MaxValue, 0));
                if (!PermissionsBL.IsActionAllowed(effectivePageRights, false, Permissions.BROWSE))
                {
                    pagesToCheck.Add(np.Id, np);
                }
                else
                {
                    allowedPages.Add(np);
                }
            }
            if (pagesToCheck.Count > 0)
            {
                IEnumerable <ulong> filteredOutPages;
                var allowedIds = PermissionsBL.FilterDisallowed(DekiContext.Current.User, pagesToCheck.Keys.ToArray(), false, out filteredOutPages, Permissions.BROWSE);
                foreach (var allowedId in allowedIds)
                {
                    allowedPages.Add(pagesToCheck[allowedId]);
                }
                return(allowedPages);
            }

            // No changes made..
            return(navPages);
        }