Protegendo o conteúdo exibido em suas páginas SharePoint

2012-08-06 Off Por gambin

 

Olá Pessoal!

Este post é referente à um recurso que utilizo frequentemente em páginas customizadas do SharePoint.

Basicamente tratam-se do controle SPSecurityTrimmedControl e da função ddwrt:IfHasRights disponível via XSLT.

Se você não entendeu nada não se preocupe! Iremos acompanhar exemplos sobre como manipular o que será exibido nas páginas utilizando ambas as opções 😀

 

# SPSecurityTrimmedControl

É o modelo mais utilizado, pois é compatível com praticamente todos os elementos do SharePoint.

Como exemplo estou utilizando a página default.aspx de um site em branco.

Apenas inseri um texto em uma tabela HTML, conforme figura abaixo:

 

Até aí tudo bem, qualquer usuário logado com acesso ao site poderá ver o conteúdo.

No entanto podemos utilizarmos o o controle SPSecurityTrimmedControl da seguinte maneira:

 

Code:

<SharePoint:SPSecurityTrimmedControl runat="server" PermissionsString="ManageLists">
     O conteúdo que você quiser!
</SharePoint:SPSecurityTrimmedControl>

Pronto!!

Deste modo somente quem possui a permissão ManageLists poderá ver este link! Show não?

 

Mas como funcionam estas permissões?

Por padrão, o SharePoint possui permissões e níveis (grupos) de permissões.

Essas permissões também estão associadas ao tipo (lista, site ou pessoas).

Ou seja, temos por padrão os seguintes níveis de permissões:

  • Controle Total
  • Design
  • Colaboração
  • Leitura
  • Acesso Limitado

Eles podem ser conferidos através do Ações do Site > Configurações do Site > Permissões do Site > Níveis de Permissão.

É extremamente recomendado que você não modifique esses grupos padrões, e sim criei novos grupos caso queira um permissionamento específico (por exemplo um grupo que permita inclusão e edição de itens de lista mas não permita exclusão).

Observe que ao criar um novo grupo de permissão, é possível visualizar todas as permissões disponíveis.

São essas as permissões que o controle SPSecurityTrimmedControl valida, conforme lista abaixo:

Permissões de Lista

  • ManageLists
  • CancelCheckout
  • AddListItems
  • EditListItems
  • DeleteListItems
  • ViewListItems
  • ApproveItems
  • OpenItems
  • ViewVersions
  • DeleteVersions
  • CreateAlerts
  • ViewFormPages

Permissões de Site

  • ManagePermissions
  • ViewUsageData
  • ManageSubwebs
  • ManageWeb
  • AddAndCustomizePages
  • ApplyThemeAndBorder
  • ApplyStyleSheets
  • CreateGroups
  • BrowseDirectories
  • CreateSSCSite
  • ViewPages
  • EnumeratePermissions
  • BrowseUserInfo
  • ManageAlerts
  • UseRemoteAPIs
  • UseClientIntegration
  • Open
  • EditMyUserInfo

Permissões Pessoais

  • ManagePersonalViews
  • AddDelPrivateWebParts
  • UpdatePersonalWebParts

 

Maiores detalhes sobre permissionamento no SharePoint através seguinte link:

http://office.microsoft.com/pt-br/windows-sharepoint-services-help/permission-levels-and-permissions-HA010100149.aspx

 

# Função ddwrt:IfHasRights

Esta função é tão fácil e tão bacana quanto o controle citado anteriormente, no entanto é um pouco mais restrita, pois é aplicada apenas em elementos que estão dentro de listsview, dataviews, entre outros elementos do SharePoint através da linguagem XSL.

Neste caso, vamos criar uma dataview que exiba alguns dados de lista de exemplo juntamente com um link de exclusão, conforme figura abaixo:

 

Observe novamente que temos um conteúdo exibido para todos os usuário.

Neste caso, podemos utilizar a seguinte função em XSL

 

Code:

<xsl:if test="ddwrt:IfHasRights(2048)">
     O conteúdo que você quiser!
</xsl:if>

 

Deste modo faço uma validação via XSL (<xsl:if>) e o que for válido pela função IfHasRights será exibido.

Observe que neste caso a função ddwrt:IfHasRights é validada por códigos das permissões, que podem ser verificados conforme a tabela abaixo:

SPSecurityTrimmedControl ddwrt:IfHasRights
ViewListItems 1
AddListItems 2
EditListItems 4
DeleteListItems 8
ApproveItems 16
OpenItems 32
ViewVersions 64
DeleteVersions 128
CancelCheckout 256
PersonalViews 512
ManageLists 2048
ViewFormPages 4096
Open 65536
ViewPages 131072
AddAndCustomizePages 262144
ApplyThemeAndBorder 524288
ApplyStyleSheets 1048576
ViewUsageData 2097152
CreateSSCSite 4194314
ManageSubwebs 8388608
CreateGroups 16777216
ManagePermissions 33554432
BrowseDirectories 67108864
BrowseUserInfo 134217728
AddDelPrivateWebParts 268435456
UpdatePersonalWebParts 536870912
ManageWeb 1073741824
UseRemoteAPIs 137438953472
ManageAlerts 274877906944
CreateAlerts 549755813888
EditMyUserInfo 1099511627776
EnumeratePermissions 4611686018427387904
FullMask 9223372036854775807

O funcionamento é basicamente igual ao controle citado anteriormente, modificando apenas sua forma de implementação.

 

# Considerações Finais

Vimos de uma maneira simplificada como aplicar permissionamento no conteúdo de suas páginas sem a necessidade de desenvolvimento em .Net, webparts, dll, entre outros, facilitando muito mais o trabalho de customização de interface.

As duas abordagens são plenamente funcionais, mas recomendo em ambos os casos a utilização do controle SPSecurityTrimmedControl, uma vez que é compatível em ambos os cenários apresentados e por possuir uma leitura mais fácil, afinal é bem mais fácil identificar o que é ManageLists do que 2048 =]

Uma informação importante é que em ambos os cenários por padrão a permissão é validada pela página ou área de acesso em que usuário está. Por exemplo:

– Acabei de criar uma Dataview que exibe dados de uma lista em que o usuário MBalzary tenha permissão de adicionar itens na lista, porém sua permissão no site é somente leitura.

– Esta Dataview tem um botão Add que deverá exibido somente para os usuários que tem a permissão AddListItems

– Se esta Dataview estiver em uma página dentro da lista (http://site/lists/lista/pagina-que-contem-a-dataview.aspx), o botão Add será exibido, afinal o usuário está navegado na lista e possui a permissão solicitada nela.

– Se esta Dataview estiver por exemplo, na página inicial do site, o botão Add não estará disponível para este usuário, afinal o contexto que está sendo utilizado é o site atual, onde ele não possui esta permissão.

Outra informação interessante é que ambas as opções citadas anteriormente no post também são compatíveis com o SharePoint 2007 (inclusive o WSS 3.0).

 

# Links Relacionados

http://msdn.microsoft.com/en-us/library/dd583143(v=office.11).aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spsecuritytrimmedcontrol.aspx
http://codename-srini.blogspot.com.br/2009/04/spsecuritytrimmedcontrol-and.html
http://www.sharepointboris.net/2009/01/limit-parts-of-page-or-dataform-webpart-to-the-ones-with-rights/
http://www.sharepointnutsandbolts.com/2008/03/great-controls-to-be-aware-of-when.html
http://www.wssdemo.com/Blog/archive/2010/01/15/SharePoint-2010-Permissions.aspx

 

Espero que tenham gostado e até o próximo post!

[]’s