Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de UsuĆ”rios
»CĆ©lulas AcadĆŖmicas«

Micro de mulher
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
FaƧa um pequeno teste com 10 questƵes de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programaĆ§Ć£o com nosso treinamento on-line de lĆ³gica de programaĆ§Ć£o
.:.
Veja nosso calendƔrio de treinamentos
Gostou da PƔgina?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 







Criando control Extenders para a Web

Quem já estudou sobre o Atlas em artigos anteriores (http://www.bufaloinfo.com.br/artigos/coluna34.asp e http://www.bufaloinfo.com.br/artigos/coluna35.asp) já sabe que o Atlas possui diversos extenders para a web. O que muitos não devem ter observado é que os extenders existentes no Atlas Control Toolkit não são apenas para demonstração. No Atlas e no Atlas Control Toolkit existe todo um framework de classes base usando e abusando dos generics que permitem a construção de forma extremamente simples de Control Extenders para web.

Os Control Extenders que podemos construir não tem uma relação tão direta com o Atlas. Podemos construir Control Extenders para qualquer tarefa. Podemos utilizar os recursos do Atlas na construção, para simplificar a comunicação entre o client e o servidor, ou não.

Assim sendo podemos ver que muita coisa se esconde no Atlas e Atlas ToolKit, bem mais do que os recursos para comunicação servidor/client

Para exemplificar esses recursos vamos criar um Extender para realizarmos operações de autorização em objetos da página. Isso quer dizer o seguinte : Vamos determinar quais usuários podem ou não acessar determinados objetos. Para isso precisamos de uma propriedade a mais nos objetos que determine quais grupos tem ou não permissão de acessa-lo. Vamos criar esta propriedade adicional e fazer o processamento em nosso extender.

Observe que comentei sobre essa necessidade no artigo em http://www.devaspnet.com.br/colunas2/coluna0126.aspx

Vamos seguir o caminho mais simples, disponibilizado pelo Atlas Control Toolkit. Quando você descompacta o toolkit encontra uma pasta chamada AtlasControlExtender com um arquivo AtlasControlExtender.VSI. Esse arquivo instala novos templates no Visual Studio, são justamente os templates para a criação de Control Extenders para a web.

Ao criarmos um novo projeto de um extender control, encontramos 3 arquivos .VB pré-montados para nos auxiliar na criação do extender. Isso porque o extender realmente necessita de 3 classes para funcionar, veja :

Extender : O próprio extender control, que realiza a tarefa para a qual foi criado e une as outras duas partes

Properties : Esta classe contém as propriedades que o Extender irá gerar para outros objetos

Designer : O designer é o responsável por fazer a exibição das propriedades corretamente na janela de propriedades do controle destino da extensão, além de fazer vários controles com relação ao funcionamento da extensão em um projeto web.

Vamos começar então pela classe que irá armazenar as propriedades, vamos chama-la de webAutorizeProperties. Essa classe herda de TargetControlPropertiesBase(Of Control).

Observe, neste ponto, o interessante uso de Generics. A classe TargetControlPropertyBase (Microsoft.AtlasControlExtender.TargetControlPropertyBase ) implementa vários recursos que teríamos que codificar nós mesmos. Para conseguir implementar isso, precisamos "informa-la" de qual classe desejamos extender. Nesse caso estamos informando a extensão da classe Control (e todos os derivados) ao passarmos o "Of Control", segundo a síntaxe do generics.

Nesta classe vamos criar nossa propriedade, vamos chama-la de "GrupoPermissao". A classe base, TargetControlPropertiesBase, já possui todos os meios para gerenciar os valores desta propriedade, portanto no Get/Set da propriedade chamaremos métodos da classe base.

Veja como fica :

    1     <DefaultProperty("GrupoPermissao")> _

    2     Public Class webAutorizeProperties

    3         Inherits TargetControlPropertiesBase(Of Control)

    4 

    5         Public Property GrupoPermissao() As String

    6             Get

    7                 Return GetPropertyStringValue("GrupoPermissao")

    8             End Get

    9             Set(ByVal value As String)

   10                 SetPropertyStringValue("GrupoPermissao", value)

   11             End Set

   12         End Property

   13     End Class

Quanto ao designer, esse não precisa ser alterado. A herança da classe base, ExtenderControlBaseDesigner, já faz tudo. Mais uma vez apontamos, através do uso de generics o tipo de objeto que estamos extendendo. Veja como fica :

    1     Class webAutorizeDesigner

    2         Inherits ExtenderControlBaseDesigner(Of webAutorizeProperties, Control)

    3 

    4     End Class

A classe principal, o extender, herda de ExtenderControlBase . Neste caso temos 2 parâmetros para o Generics, a classe na qual criamos nossas propriedades e o tipo de objeto que estamos extendendo.

O template desta classe traz o atributo clientScriptResource, ligado a um arquivo javascript. Trata-se de uma previsão de que nossa classe vá estar fazendo uso de javascript para suas tarefas, o que não é o caso deste nosso exemplo, portanto podemos retirar este atributo.

É nesta classe que faremos a implementação de nosso código, através do evento load. Esta classe possui uma coleção com todas as definições de propriedades (instâncias de webAutorizeProperties) feitas para outros controles na página. Vamos vasculhar esta coleção e, para cada elemento, vamos determinar se o objeto tem ou não permissão para ser visualizado.

Veja como fica :

    1     <Designer(GetType(webAutorizeDesigner))> _

    2     Public Class webAutorizeExtender

    3         Inherits ExtenderControlBase(Of webAutorizeProperties, Control)

    4 

    5 

    6         Private Sub webAutorizeExtender_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    7             For Each wap As webAutorizeProperties In Me.TargetProperties

    8                 Dim wuc As Control

    9                 wuc = Page.FindControl(wap.TargetControlID)

   10                 If Not isnothing(wuc) Then

   11                     wuc.Visible = Context.User.IsInRole(wap.GrupoPermissao)

   12                 End If

   13             Next

   14         End Sub

   15     End Class

Feito isso podemos adicionar um novo projeto web na solução, para realizar testes. O Visual Studio é bem amigável, depois de um rebuild na class library nosso extender já irá aparecer na toolbox.

Para testarmos podemos inserir nosso extender na página web e mais 3 textbox. Você poderá ver, nas propriedades da textbox, a nova propriedade que criamos através do nosso extender. Vamos definir em duas textboxes a propriedade GrupoPermissão como sendo "Admins" e na última como "Users".

Antes de podermos rodar a aplicação precisamos inserir na página um scriptManager. Uma necessidade devido ao uso das classes base fornecidas pelo Atlas. Você pode adicionar o scriptManager na toolbox, adicionando a dll do próprio Atlas na toolbox.

Por fim, basta rodar a aplicação. Você verá que 2 textbox somem, as duas que só podem ser vistas pelo grupo "Admins", enquanto que a 3a, acessível aos "Users", fica visível.

Como ? Não entendeu ? Você não pode esquecer que a configuração default do web.config é para uso de autenticação windows. O grupo "Admins" está escrito errado (o correto seria Administrators) mas o grupo Users existe e seu usuário windows é parte dele, por isso a 3a textbox apareceu.

Claro, você pode configurar o sistema de segurança para forms e fazer testes mais detalhados

 

Dennes Torres
MCAD,MCSD,MCSE,MCDBA

 





Envie seus comentįrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentįrios nesta pįgina

Veja abaixo os comentários já enviados :

Nome : obnzt jywq E-Mail : hxpcb@mail.com
fgjspb yvgnomp oxzk cwpfo vidop lvet jtdqrn
Nome : obnzt jywq E-Mail : hxpcb@mail.com
fgjspb yvgnomp oxzk cwpfo vidop lvet jtdqrn
Nome : LskTGK4OaJli E-Mail : 2dla1iufh@gmail.com
In awe of that anwsre! Really cool!

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

ļæ½ BĆŗfalo InformĆ”tica, Treinamento e Consultoria - Rua Ɓlvaro Alvim, 37 Sala 920 - CinelĆ¢ndia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br