Melhor solução

Galera,
Estou criando um sistema junto com um colega meu que tem vários tipos de grupos de acesso como adim,usuário ect… Qual a melhor maneira de criar as páginas dinamicamente para cada grupo se tivesse que usar GWT.
Por o admin desse sistema pode ter acesso a todas as funcões da página princípal, porém o usuário somente a algumas.
Estamos pensando em várias soluções e infelizmente a que parece ser a mais obvia seria a de inserir vários if!!

Pense em uma modelagem de dados.

Usuario
id, perfil, nome, senha

Perfil
id, descricao

Regra
id, descricao

Perfil_Regras
id_perfil, id_regra

pesquisa no banco de dados em um método que retorne true caso ele tenha acesso aquela regra.

Infelizmente dá na mesma, ou seja, ficaria com uma tela cheia de ifs… Será que não existem uma solução melhor

Se suas regras forem as páginas q podem ser acessadas por aquele usuário poderia ficaria assim:]

// Deverá ser feito em cada página
if (temPermissaoParaEssaPagina(1)) {
  // faz o q tem q fazer
else {
  // redireciona para página de acesso negado
}

o método temPermissaoParaEssaPagina recebe o id da página que está sendo feito a verificação. Ele faria uma busca no banco de dados e verificaria se aquele usuário está ligado ao perfil que tem essa regra/pagina.
Se tiver retorna true, senão false.
Compreendeu ?

Blz amigo, valeu pelo esforço, mas não é isso.
Vou explicar melhor.
Exemplo, tenho um pagina (html) com os seguintes opções, por exemplo:

admin condomínio
admin salas
admin agenda
admin pagamento

Essas opções são meus componentes da página logo poderiam ser botões, abas e menus ect…
O botão pagamento( ou aba ) da página principál aquela quem vem logo depois do login deve ser visualizado somente pelo admin. Já o admin vé toda a pagina com todos seus componentes. O que quero é filtrar os componentes da página por grupos de forma menos impactante possível nas páginas, ou seja, sem aquele monte de ifs…
Desculpas, acredito que a minha explição do problema ficou mais clara :lol:

Sim, ficou mais claro.

Pense na solução q eu te disse.
Ao invés de ser páginas, são os componentes.

Vc não vai escapar de um if para cada componente:

admin condomínio rendered="#{mb.temPermissao(1)}“
admin salas rendered=”#{mb.temPermissao(2)}“
admin agenda rendered=”#{mb.temPermissao(3)}“
admin pagamento rendered=”#{mb.temPermissao(4)}"

e no ManagedBean terá um método que verifica no banco se o perfil do usuário logado tem aquela regra. Se tiver retorna true e ele poderá ver, senão retorna false e o componente não será renderizado.

Cara essa é a melhor forma de se fazer isso. Vc não está pensando direito em como encaixar ela.
O jBoss Seam tem uma abstração dessa forma de permições. Ele pode dar permições desde métodos, a páginas e etc…

Faz um grupo, com niveis de usuário. Adiciona algo como um nivel de poder. Na hora de renderizar a tela, deixa se rexibido apenas o que pode ser visto pelo usuário. Algo como:

[code]Usuario user = new Admin();
if(user.temPermissao(Nivel.ADMINISTRADOR) {
//renderiza
}
// mais código

if(user.temPermissao(Nivel.FUNCIONARIO) {
//renderiza
}
[/code]

O nível mais alto sempre engloba o mais baixo. Um exemplo de como fazer isso(não acho muito bonito, mas é só um exemplo), é adicionar constantes com a permissão de cada um.

USUARIO = 1
FUNCIONARIO = 2
ADMINISTRADOR = 3

E o método tem permissão verifica se o número do usuário é maior ou igual ao nivel passado como parâmetro.

É … talvez isso seja mais simples pra ele …

aluisiodsv,
Ok, mas se eu tiver 200 componentes na páginas serão 200 chamadas no banco de dados. Não consigo imaginar na prática, suponha 10.000 acesso simultâneos, não vai cair drasticamente a permormance. É só um palpite. De qualquer forma valeu pela sujestão pois vou estudá-la!! :smiley:

É aí q vc escolhe se quer passar esse processamento pro seu banco de dados ou para o seu service.

Se quiser deixar com o service é só carregar estas regras previamente.
Em um sistema q tenha 10.000 acessos simultâneos COM CRTZ vc vai precisar de um sistema de controle muito mais complexo q este, e não é viável deixá-lo carregado no service.

Meio do ano passado eu estive em um projeto com essa quantidade de acesso simultâneos. Computação nas nuvens faz milagres! 4 servidores dividindo todo o processamento de banco de dados. Quase nada de servidor para o service. E qualquer dispositivo com acesso a internet visualizava relatórios, etc…

marcio_gs,
Valeu mas como falei antes essa conclusão e a do aluisiodsv não são interessantes, como expliquei antes, de qualquer forma obrigado

[quote=fabioEM]aluisiodsv,
Ok, mas se eu tiver 200 componentes na páginas serão 200 chamadas no banco de dados. Não consigo imaginar na prática, suponha 10.000 acesso simultâneos, não vai cair drasticamente a permormance. É só um palpite. De qualquer forma valeu pela sujestão pois vou estudá-la!! :smiley: [/quote]

Eu tenho permissões. Quando o usuario loga ficam carregadas as permissões no client (Flex). Depois posso usa-las em qualquer lugar no sistema. Isso ajuda?

Cara, faz assim, por exemplo, você tem módulos, e cada módulo tem um nome, img, link, etc… daí você cria uma relação entre usuário e módulo, e resgata todos os módulos que estão relacionados com o usuário e renderiza :stuck_out_tongue:

E o filtro dos componentes por grupos?Essa solução seria a normal, ou seja, cada página teria um controle sobre quais componentes renderizar. Se a pagina tem x componentes(abas, botoes ectt) tambem teria x expressões de condições…De qualquer forma é preferível essa solução a de fazer consultas SQL.

[quote=fabioEM]E o filtro dos componentes por grupos?Essa solução seria a normal, ou seja, cada página teria um controle sobre quais componentes renderizar. Se a pagina tem x componentes(abas, botoes ectt) tambem teria x expressões de condições…De qualquer forma é preferível essa solução a de fazer consultas SQL.
[/quote]
Me perdi xD

Amigo tranquillo,
Já esta solucionado! :lol:
Mas o problema esta descrito acima se quiser refletir sobre!

Blz…

Põe resolvido no título do tópico e posta a solução aí se puder :stuck_out_tongue:

Que daí se outra pessoa tiver o mesmo problema ela poderá utilizar a mesma solução :smiley:

[]'s

Cara,

A solução proposta por aluisiodsv não me pareceu a mais inteligente. A arquitetura será como a do software que vc pode ver nesse link
http://www.minimal.pt/WK-DOCS/pub/pt/mjv/tecnologia/tecnologia.htm
As páginas serão criadas dinamicamente por um framework os detalhes das páginas ficaram em uma base de dados.
Assim as páginas são criadas uma só vez, ou seja, cada solicitação terá somente uma consulta.
Leia sobre minimal vai encontrar e entender melhor. :wink: