Cara, é um pouco dificil de explicar, mas o sistema que fizemos aqui é
todo assim, completamente cheio de permissões.

Fizemos o seguinte: as permissões ficam no banco de dados. Criamos
então no flex uma classe de permissões, que busca todas as permissões
do usuario e coloca num array. Nao da pra saber qual é a permissao de
uma tela sem consultar o banco, mas... nao encontramos forma melhor,
já que estamos migrando um sistema desktop para web e tem que ser
assim.
Bem, feito isso, em cada tela que abrimos, no initialize da tela
chamamos uma funçao e colocamos componente.enabled =
clsPermissao.getPermissao(154); por exemplo. Supondo que a permissão
154, que é permissão de salvar do cadastro de clientes seja falsa,
ficaria no initialize da tela btnSalvar.enalbled =
clsPermisao.getPermissao(154);
Essa classe clsPermissao tem um metodo estatico que é o getPermissao.
Ela busca todas as permissoes no .NET e cria o array.

Foi a melhor forma que encontramos, já que cada usuario tem acessos
específicos a cada operação. Olha a função initialize da tela
principal do nosso programa (vlf_permissao = getPermissao que citei).
o primeiro parâmetro é o objeto que vai receber a permissao, o segundo
é o número da permissão, e o terceiro é o tipo (Salvar, Alterar,
Consultar, Excluir)

                private function inicializa_permissoes():void {
                        cls_Permissao.vlf_permissao(btn_pesquisar,278,"S");

                        cls_Permissao.vlf_permissao(cvs_telefones,359,"C");
                        cls_Permissao.vlf_permissao(cvs_dados_gerais,19,"C");
                        cls_Permissao.vlf_permissao(cvs_enderecos,361,"C");
                        cls_Permissao.vlf_permissao(cvs_terceiros,350,"C");
                        //cls_Permissao.vlf_permissao(cvs_cpf_repetidos,0,"C");

                        cls_Permissao.vlf_permissao(btn_cadTelefones,359,"S");
                        cls_Permissao.vlf_permissao(btn_cadEnderecos,361,"S");
                        cls_Permissao.vlf_permissao(btn_cadTerceiros,350,"S");

                        cls_Permissao.vlf_permissao(aba_ocorrencias,62,"C");
                        cls_Permissao.vlf_permissao(aba_dividas,6,"C");
                        
cls_Permissao.vlf_permissao(aba_consultar_recibos,10,"C");
                        cls_Permissao.vlf_permissao(aba_boletos,14,"C");
                        cls_Permissao.vlf_permissao(aba_DI,149,"C");
                        
cls_Permissao.vlf_permissao(aba_mensagem_juridico,6,"C");
                        cls_Permissao.vlf_permissao(aba_refi,185,"C");
                        
cls_Permissao.vlf_permissao(aba_consultar_acordos,3,"C");
                        cls_Permissao.vlf_permissao(aba_avon,395,"C");
                }


eis o método na classe:


                        public static function vlf_permissao
(olp_objeto:Object,ilp_permissao:int,slp_tipo:String):void {
                                if (olv_permissoes_usuario != null) {
                                        var ilv_perm_calculado:Boolean = false;
                                        switch (slp_tipo) {
                                                case "C":
                                                        slp_tipo = "Consultar";
                                                        ilv_perm_calculado = 
olv_permissoes_usuario[(ilp_permissao * 4)
- 3];
                                                        break;
                                                case "S":
                                                        slp_tipo = "Salvar";
                                                        ilv_perm_calculado = 
olv_permissoes_usuario[(ilp_permissao * 4)
- 2];
                                                        break;
                                                case "E":
                                                        slp_tipo = "Excluir";
                                                        ilv_perm_calculado = 
olv_permissoes_usuario[(ilp_permissao * 4)
- 1];
                                                        break;
                                                case "I":
                                                        slp_tipo = "Imprimir";
                                                        ilv_perm_calculado = 
olv_permissoes_usuario[(ilp_permissao *
4)];
                                                        break;
                                        }

                                        if (olp_objeto is DataGrid) {
                                                olp_objeto.doubleClickEnabled = 
ilv_perm_calculado;
                                        } else {
                                                olp_objeto.enabled = 
ilv_perm_calculado;
                                                if (!olp_objeto.enabled) {
                                                        olp_objeto.toolTip = 
"Permissão Necessária: " +
ilp_permissao.toString() + " " + slp_tipo;
                                                }
                                        }
                                }
                        }


Espero que isso ajude.
Aos que tem mais experiencia com OOP, padrões, etc, me corrijam para
ajudar nosso amigo. Valeu galera!

William Paiva

On 24 mar, 21:57, TITO <vhs...@gmail.com> wrote:
> cara seta um campo no teu banco de dados pra guardar o nivel do
> usuario
> e quando tua aplicação flex carregar pede pra ele ler esse campo do
> banco e deixar abilitado
> apenas as opções em que o usuario pode interagir.
>
> ;**
>
> On 24 mar, 21:52, Bruno Carneiro <guimaraescarne...@gmail.com> wrote:
>
>
>
> > Eu pretendo fazer um sistem que tem vários usuários e cada usuário tem
> > seu nível de acesso.
>
> > Ou seja, cada usuário pove ver um sub-conjunto de funcionalidades
> > específico.
>
> > Como fazer isso em flex? Alguém já fez?
>
> > Eu pensei em fazer algo do tipo uma view stack contendo todo o
> > sistema. E usar states para filtrar o que cada usuário vai ver.
>
> > Cada nível de usuário é um state, assim filtrando o que ele pode ver.
>
> > O difícil é quando uma coisa pode ser vista por dois usuários, neste
> > caso, no meu state vou ter duas cópias do msm componente? Ou tem como
> > eu definir que um componente vai ser visto por mais de um state?- Ocultar 
> > texto entre aspas -
>
> - Mostrar texto entre aspas -
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a