/// <summary> /// Filters a sequence of <see cref="HiveId"/> where the Anonymous <see cref="UserGroup"/> has permissions <paramref name="permissionIds"/> by checking with <paramref name="securityService"/>. /// </summary> /// <param name="entityIds">The entity ids.</param> /// <param name="securityService">The security service.</param> /// <param name="entityUow">The entity uow.</param> /// <param name="securityUow">The security uow.</param> /// <param name="permissionIds">The permission ids.</param> /// <returns></returns> public static IEnumerable <HiveId> FilterAnonymousWithPermissions(this IEnumerable <HiveId> entityIds, ISecurityService securityService, IReadonlyGroupUnit <IContentStore> entityUow, IReadonlyGroupUnit <ISecurityStore> securityUow, Guid firstPermission, params Guid[] permissionIds) { var anonymousUserGroup = securityService.GetAnonymousUserGroup(securityUow); if (anonymousUserGroup == null || firstPermission == Guid.Empty) { return(Enumerable.Empty <HiveId>()); } return(entityIds.Where(id => securityService.GetEffectivePermissions(anonymousUserGroup.Id.AsEnumerableOfOne(), entityUow, securityUow, id, firstPermission.AsEnumerableOfOne().Concat(permissionIds).ToArray()).AreAllAllowed())); }