Fórum [OT] - Ajuda pra montar controle de Permissões do Sistema #325803
21/07/2006
0
Permissoes:
Quando o sistema for iniciado eu gostaria varrer essa tabela e vê o que o usuário tem ou não acesso e vou liberando, mais gostaria de uma ajuda de vocês.
Como faço para jogar nessa tabela o nome dos Itens do Meu Menu pegando o nome e o Caption do mesmo.
Também como faço para mostrar em um TreeView os dados varridos da tabela, podendo Habilitar ou Desabilitar cada Item clicando sobre essa TreeView?
Alguém tem alguma Idéia?
Paullsoftware
Curtir tópico
+ 0Posts
21/07/2006
Aasn
Todos os componentes do Delphi possuem a propriedade Tag do tipo numérico, então eu criei uma tabela com todos os direitos do sistema, atribuindo-as um código, este código é utilizado no preenchimento do Tag dos componentes.
Quando o usuário se loga ao sistema, este carrega uma tabela contendo os código a que ele tem direito de acesso e joga em um Array que está no form principal. Daí uma precedure faz uma varredura nos componentes com base no Tag dos mesmos a medida em que os forms forem abertos e vai habilitando ou não de acordo com a matriz.
Espero ter colaborado...
[]´s
AASN
Gostei + 0
22/07/2006
Titanius
[]s
Gostei + 0
23/07/2006
Paullsoftware
mais prefiro eu mesmo fazer esse controle, pois, usando componentes de terceiros posso ficar amarrado a ele em uma possível atualização até onde sei eles já possuem biblioteca para BDS2006 mais por ironia do destino eles param o projeto e ai, fico sem poder migrar para uma futura versão... esse é um dos motivos pelo qual não gosto de usar esses componentes, até uso quando o cliente quer economizar no valor do sistema uso algums para diminuir o meu trabalho, mais aviso a ele que vou fazer isso, pois, tenho sempre o delphi 7 comigo e não penso em deixá-lo nem tão sedo...
valeu pela força, um abraço :wink:
Gostei + 0
23/07/2006
Nightshade
eu sempre uso componentes proprios, ou testo muito bem os componentes de terceiros q uso qnd nao tenho tempo de codar um..
Gostei + 0
24/07/2006
Bruno Belchior
Gostei + 0
24/07/2006
Titanius
Já que a biblioteca é open e free... se você quiser, você mesmo pode modificar, e no meu caso, eu mesmo migrei minha biblioteca pra BDS2006 antes de ´oficialmente´ sair... já que tenho os fontes...
Mas como eu disse, é minha opinião, reinventar a roda nos tempos de hoje é complicado. e esta biblioteca é muito boa, é claro que precisa melhorar e muito... :wink:
[]s
Gostei + 0
24/07/2006
Bruno Belchior
Gostei + 0
24/07/2006
Paullsoftware
quanto ao uso da biblioteca UserControl é como eu já disse, nos meus sistemas uso apenas componentes da própria VCL, e somene um pago o [b:1d0f9cb750]RdPrint[/b:1d0f9cb750], mais no meu Delphi7 tenho vários componentes instalados, porem quando um cliente pede alguma coisa mais atrativa ele vai pagar a+++ por isso....
vlw pela participação :wink:
:arrow: vamos continuar... com as :idea: :idea:
Gostei + 0
25/07/2006
Titanius
é Só você salvar o nome do Form, e o nome do controle que você quer habilitar/desabilitar... aí é sh vc dar um for no componentscount do Form salvo, e verificar se esta na tal tabela, se estiver vc aplica o true ou false...
Assim, vc nao faria muita coisa, soh uma funcao que seria chamada no OnShow de cada Form...
Espero ter ajudado.
[]s
Gostei + 0
25/07/2006
Paullsoftware
Com certeza sempre ajuda, disso não tenha dúvida... :lol:
é exatamente isso que estou tentando fazer, eu já consegui guardar os itens do menu na minha tabela e carregá-los. encontrei uma função na net e estou tentando implementá-la as minhas necessidades.
Eis a função:
{
Cria um "MainMenu" via banco de dados automaticamente
-> Arquivo MENUS.DBF
Campos -> Campo Character 20 -> Nome do campo
Sequencia Character 1 -> 1,2,3,...
Ordem Character 1 -> 1,2,3,...
Flag Boolean -> .T. ou .F.
CampoNN Character 20 -> Nome do SubCampo
FlagNN Boolean -> .T. ou .F.
-> Índice = ´Sequencia + Ordem´
Desenvolvido em Clipper/Dbase, função Achoice()
Convertido para Delphi 7.0 em 20/Agosto/2004
}
unit MenuPas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Menus, Grids, DBGrids,
DB, DBTables, ExtCtrls, DBCtrls, Buttons;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Button1: TButton;
BitBtn1: TBitBtn;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
Table1: TTable;
Table1CAMPO: TStringField;
Table1SEQUENCIA: TStringField;
Table1ORDEM: TStringField;
Table1FLAG: TBooleanField;
Table1CAMPO01: TStringField;
Table1CAMPO02: TStringField;
Table1CAMPO03: TStringField;
Table1CAMPO04: TStringField;
Table1CAMPO05: TStringField;
Table1FLAG01: TBooleanField;
Table1FLAG02: TBooleanField;
Table1FLAG03: TBooleanField;
Table1FLAG04: TBooleanField;
Table1FLAG05: TBooleanField;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem: TMenuItem;
X, I, K: integer;
XCampo: string;
XFlag: Boolean;
begin
Table1.First;
K := Table1SEQUENCIA.AsInteger;
while (K <= 1000) and not Table1.Eof do
begin
K := Table1SEQUENCIA.AsInteger;
NewItem := TMenuItem.Create(MainMenu1);
try
NewItem.Caption := Table1CAMPO.Value;
NewItem.Enabled := Table1FLAG.Value;
MainMenu1.Items.Add(NewItem);
except
NewItem.Free;
raise; { reraise the exception }
end;
Table1.Next;
I := K;
while (I = K) and not Table1.Eof do
begin
NewItem := TMenuItem.Create(Self);
try
NewItem.Caption := Table1CAMPO.Value;
NewItem.Enabled := Table1FLAG.Value;
MainMenu1.Items[K - 1].Add(NewItem);
X := 1;
while (X <= 5) do
begin
XCampo := ´´;
XFlag := False;
if (X = 1) then
begin
XCampo := Table1CAMPO01.Value;
XFlag := Table1FLAG01.Value;
end
else if (X = 2) then
begin
XCampo := Table1CAMPO02.Value;
XFlag := Table1FLAG02.Value;
end
else if (X = 3) then
begin
XCampo := Table1CAMPO03.Value;
XFlag := Table1FLAG03.Value;
end
else if (X = 4) then
begin
XCampo := Table1CAMPO04.Value;
XFlag := Table1FLAG04.Value;
end
else if (X = 5) then
begin
XCampo := Table1CAMPO05.Value;
XFlag := Table1FLAG05.Value;
end;
if XCampo <> ´´ then
begin
NewItem := TMenuItem.Create(Self);
try
NewItem.Caption := XCampo;
NewItem.Enabled := XFlag;
MainMenu1.Items[K - 1].Items[Table1ORDEM.AsInteger - 1].Add(NewItem);
except
NewItem.Free;
raise; { reraise the exception }
end;
end;
Inc(X);
end;
except
NewItem.Free;
raise; { reraise the exception }
end;
Table1.Next;
K := Table1SEQUENCIA.AsInteger;
end;
end;
end;
end.estou a adapitando para minhas necessidades... :wink:
Gostei + 0
27/01/2008
Mcamilo.o
Gostei + 0
27/01/2008
Jpauloss
Gostei + 0
27/01/2008
Onjahyr
[b:92684c68e6][OT][/b:92684c68e6] - É quando se deseja falar alguma coisa que não está diretamente ligado com o assunto do fórum.
[b:92684c68e6][OT][/b:92684c68e6] --> Off Topic (traduzindo: Tópico desligado).
Não entendi por que ele colocou, uma vez que não se trata de um assunto fora do contexto do fórum, mas, cada um com sua loucura :lol:
Tudo é válido!
Blz.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)