 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Sáb Dez 26, 2015 4:44 pm Assunto: Grupos de Acesso |
|
|
Olá Pessoal, Boa tarde!
Gostaria de uma orientação sobre qual é a melhor forma de criar uma validação de Permissões de acesso para um grupo de usuários.
A validação que desenvolvi no momento, consiste em armazenar os valores como (True e False) em uma tabela chamada grupos acesso.
Por exemplo, se eu quiser bloquear o botão incluir de um form, eu teria nessa tabela, uma coluna com o nome do form e a letra I no final, para identificar que essa coluna refere-se ao botão Incluir e esse campo receberia o valor (True e False), através de um checkbox marcado em tela pelo usuario, mas como existem diversos forms essa tabela do banco de dados acabou ficando extensa... (mais de 50 colunas).
para validar a verificação, no form Principal da aplicação criei procedures separadas para cada form para verificar se o valor do campo é "False" e para bloquear os botões chamo somente a procedure correspondente no ONShow do form que desejo bloquear e em alguns botões para fazer a validação.
abaixo um exemplo de um código de verificação ..
if tabelagrupos_acessofrmteste = Fasle then
begin
botaoteste.enabled := false;
if formteste2 <> nil then
begin
formteste2.botaoteste.enabled := false;
end;
end;
o que queria é otimizar o código e reduzir os campos da tabela, mas não sei bem o que poderia fazer por isso queria uma ajuda.
No form que criei para o usuário criar o grupo, criei ele de uma forma especifica onde o usuário pode selecionar os botões que deseja permitir individualmente para cada form.
Abraços
Diego
Nesse caso existe um melhor modo de fazer essa validação?
Diego |
|
Voltar ao Topo |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
Enviada: Seg Dez 28, 2015 7:40 am Assunto: |
|
|
Tá...ao inves de ter uma tabela com os campos todos, faça assim:
- em cada form vc tem uma propriedade chamada Tag, que por padrão tem valor 0. Essa propriedade em geral não serve para nada, logo, você pode numerar ela do jeito que precisa...
- crie uma tabela assim :
- id
- idtela
- acessa
- grava
- altera
- exclui
Essa tabela tem o ID que é chave primária, o IDTELA que indica a tela que você quer controlar. No caso, nesse valor vai o numero do form, que você irá alimentar na propriedade TAG do form.
Dai você tem as permissões de acesso, gravação, alteração e exclusão, que tanto pode deixar como string ou integer, a seu gosto.
Quando entrar no form, pega o valor da TAG, vai nesse tabela e pega as permissões, dai armazena em variáveis locais e pronto.
Abraço... |
|
Voltar ao Topo |
|
 |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Seg Dez 28, 2015 12:56 pm Assunto: |
|
|
Olá Ghost Rider,
Obrigado pela dica amigo...
Não conhecia essa propriedade TAG do form, dessa forma realmente facilita e muito!
vou ajustar o código e depois post aqui para ajudar quem precisar
abraços
Diego |
|
Voltar ao Topo |
|
 |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Seg Dez 28, 2015 2:49 pm Assunto: |
|
|
Ghost Rider,
Fiquei com uma duvida.. qual a melhor forma de fazer esse Insert por que será setado permissões diferentes para cada form..
Para não ficar cansativo, tenho um ScrollBox em tela onde o usuário rola a barra escolhendo o que quer marcando os DbCheckboxs (não tenho telas individuais para ele inserir separadamente), corrigindo o que falei em cima.. não são botões e sim checkboxs
eu poderia pegar o valor desses checkbox e adicionar em variáveis e realizar um único insert, ou abrir varias seções da mesma tabela no form relacionando elas ao DBcheckbox, mas acho que dessa forma não seria correto.
o q sugere?
Galera, desculpem, mas ainda tenho muito o q aprender de delphi
Abraços,
Diego |
|
Voltar ao Topo |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
Enviada: Ter Dez 29, 2015 6:48 am Assunto: |
|
|
Tá..o primeiro passo ai é você ter uma tela onde será inserida as "permissões" do usuário...
No meu caso, no cadastro de usuários, eu tenho uma stringgrid com os menus e uma coluna para cada permissão, uma para acesso do form, outra para inserção, outra para alteração e outra coluna para exclusão.
No meu caso, cada coluna é um checkbox que você seta como permitindo ou não aquela opção. Não vou entrar em detalhes como eu faço o check porque uso uma grid não nativa do delphi junto com outro componente de dados em memória, mas enfim, você checa o que o usuário vai poder fazer.
Depois disso, faço um while do inicio ao final da grid, fazendo um insert para cada linha da grid. Mesmo o usuário não tendo permissão para determinado form eu gravo um registro dizendo que ele não tem essa permissão.
Faço isso até porque quando carrego o sistema, pego essas permissões e verifico o que ele pode ou não acessa, se ele não puder acessar um determinado form, eu desabilito ele no menu.
Abraço... |
|
Voltar ao Topo |
|
 |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Ter Dez 29, 2015 7:06 am Assunto: |
|
|
Olá,
Valeu pela dica.
Aqui estou fazendo um pouquinho diferente, por que tenho o "Grupos de Acesso" separado dos usuários, quero setar permissões nos grupos.
Uma solução paliativa que encontrei é criar diversos datasources para realizar os insert na mesma tabela, mas acho q a melhor forma seria utilizar um vetor para inserir, alterar etc.. Depois eu post o código, para ajudar que precisar.
Abraços
Diego |
|
Voltar ao Topo |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
Enviada: Ter Dez 29, 2015 8:16 am Assunto: |
|
|
Eu tambem tinha, mas pense comigo..qual a diferença da permissão do usuário para o grupo ??? Nenhuma..logo, eu uso a mesma tabela tanto para usuário como para grupo, dai eu seto uma variável indicando se a permissão é de grupo ou do usuário, mas as permissões ficam na mesma tabela... |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|