Postagens

Mostrando postagens de Março, 2017

Princípio de substituição de Liskov

Imagem
Uma das regras que ajudam a nortear o design de objetos é o Princípio de Substituição de Liskov. Esse preceito foi definido inicialmente por Barbara Liskov em 1987 mas ganhou maior divulgação ao compor o grupo de regras chamado SOLID exposto por Robert C. Martin no livro Agile Software Development: Principles, Patterns, and Practices.
Este princípio diz que se q(x) é uma propriedade demonstrável dos objetos x de tipo T. Então q(y) deve ser verdadeiro para objetos y de tipo S onde S é um subtipo de T. Um pouco confuso na primeira vez que se lê, mas que na prática atesta que eu posso substituir uma instância de uma classe por outra instância que seja de uma subclasse da primeira, sem que isso altere o comportamento do sistema.

Vamos usar um exemplo para poder explicar melhor. Veja a listagem de código abaixo. Ela simula um sistema de cálculo de imposto para venda de veículos. A classe Carro contém um método chamado CalcularValorImposto que recebe o valor do veículo e quando acionado fa…

Permissão para busca em listas do SharePoint com acesso anônimo

Um problema recente que tivemos com um portal baseado em SharePoint foi a falta de retorno de registros do mecanismo de busca nativo para usuários anônimos. Haviam listas personalizadas que continham informações e que quando um usuário autenticado fazia a busca, esses dados eram trazidos como resultado. Já quando a busca era feita por um usuário anônimo (no caso, na parte do portal exposta na Internet), esses dados não vinham.
Após uma análise do log, descobriu-se que esses resultados eram removidos na hora de validar a segurança, ou seja, o SharePoint via que o usuário anônimo não tinha permissão para visualizar os dados dessas listas.
Para resolver este problema, foi necessário quebrar a herança de permissão das listas e dar o acesso faltante para o usuário anônimo poder visualizar os dados na busca. Para isto, foi utilizado o script PowerShell abaixo.
$web = Get-SPWeb "http://urldosite" $list = $web.TryGetList("nome da lista") $list.BreakRoleInheritance($true) $…