Array
(
)

restringir acesso

Aspirante
   - 04 jan 2006

bom eu queria fazer minha aplicação em rede. mas seria assim, os funcionários teriam uma senha para cada um, por exemplo, o funcionario1 tem a senha 123, o funcionario2 tem 456, e assim por diante. o problema surge que, o administrador que cria essas senhas e ele pode restringir o acesso, por exemplo, o funcionario2 não pode ver o relatório do dia, cadastrar clientes, enfim, mas pode outras funções. eu pensei em fazer um form com uma checklist com todos os itens, aí o admin dá o nome da senha e seleciona os itens que o funcionario pode entrar. mas não sei certas coisas:

onde será guardada a senha?

outra: eu pensei que quando ele restringe acesso a algumas funções, ele ir tirando do menu, por exemplo, se senha = 456, relatorios.visible := false, onde relatorios é um submenu do mainmenu. mas como eu poderia fazer essa verificação e ele saber que tais menus devem ser apagados dependendo da senha?

preciso de uma luz. alguem poderia me ajudar?


Caninha51
   - 04 jan 2006

Eu faço assim.

Tenho uma tabela de menus, onde adiciono o nome de todos os menus do meu sistema e sua descrição. O nome eh o do TMenuItem mesmo.
Tenho outra tabela de acessos com os campos Usuario e Menu.
Ai nela eu associo as permissão de cada usuário.

Pra facilitar eu criei uma telinha onde listo todos os menus de um lado e do outro os usuários, que são criados no próprio banco.

Depois q o usuário se loga no sistema verifico as permissoes dele na tabela de acessos e libero os menus que ele pode acessar.

Criei uma função pra facilitar a consulta...
#Código


function TfrmPri.Consultar(Instrucao: string): Boolean;
begin
qryAux.SQL.Clear;
qryAux.SQL.Add(Instrucao);
qryAux.Open;
Result := not qryAux.IsEmpty;
end;


E dou um loop nos componentes liberando os que ele pode acessar...
#Código

for intI := 0 To ComponentCount - 1 do
if Components[intI] is TMenuItem then
TMenuItem(Components[intI]).Enabled := Consultar(
´SELECT * FROM ACESSOS WHERE USUARIO = ´ + QuotedStr(UserLogado) +
´ AND MENU = ´ + QuotedStr(Components[intI].Name));


Pronto, eu faço assim! :D

Deu pra entender mais ou menos?hehe

vlw