private static IEnumerable <CategoriaConteudo> ObterCategoriasPorUsuario(Usuario usuario, bool exibirTodasUfsGestor, bool exibirTodasCategorias = false) { var manterCategoria = new ManterCategoriaConteudo(); // Caso não deseje filtrar as categorias, exibir todas. if (exibirTodasCategorias) { return(manterCategoria.ObterTodasCategoriasConteudo()); } // Atualizar lista de categorias, pois fica salva na sessão. var listaCategoriaConteudo = new ManterUsuario().ObterUsuarioPorID(usuario.ID).ListaCategoriaConteudo; if (usuario == null) { throw new AcademicoException("Usuário inválido na busca de categorias"); } // Caso seja gestor, filtrar as categorias. if (usuario.IsGestor()) { if (exibirTodasUfsGestor) { return(manterCategoria.ObterTodasCategoriasConteudoPorUF(usuario.UF)); } // Caso o usuário possua categorias selecionadas, filtra mais ainda. if (listaCategoriaConteudo.Any()) { return(manterCategoria.ObterTodasCategoriasConteudoPorUF(usuario.UF) .Where(c => c.ListaUsuario.Select(u => u.ID).Contains(usuario.ID))); } return(manterCategoria.ObterTodasCategoriasConteudoPorUF(usuario.UF)); } // Caso seja administrador, não filtrar as categorias. return(manterCategoria.ObterTodasCategoriasConteudo()); }