MENUS - VB.NET
Ola Pessoal Tenho um sistema feito em vb.net + c# . com menus queria comecar a controlar onde os usuarios tem permisão ou nao para entrar , alguem tem exemplo que possa me passa , os menus estao criando em menustrip sem banco de dados ou xml , queria manter um melhor permisao dos usuarios
Obrigado , se tiverem exemplo me indicar algo
fico grato
Joao Spagnol
Obrigado , se tiverem exemplo me indicar algo
fico grato
Joao Spagnol
cria um campo de permissão na sua tabela de login. Depois é só verificar o conteudo dela ao logar
ai se a permissão for X por exemplo desabilita
se for Y não
é isso
ai se a permissão for X por exemplo desabilita
se for Y não
é isso
entao esta é a logica mais como busco os menus e nome deles para eu gravar na tabela ?
vc nao vai gravar os nomes dos menus na tabela
o que será gravado sera um campo de permissão, os campos serão desabilitados em tempo de execução no código fonte
ai vc vai fazendo a verificação no form dos menus, caso o campo permissão seja admin então nao desabilita nada, caso seja usuario desabilita n coisas, entendeu?
e só vc criar uma variavel publica pra isso e fazer ela receber o campo permissão e depois ir verificando qual o conteudo dessa variavel
o que será gravado sera um campo de permissão, os campos serão desabilitados em tempo de execução no código fonte
ai vc vai fazendo a verificação no form dos menus, caso o campo permissão seja admin então nao desabilita nada, caso seja usuario desabilita n coisas, entendeu?
e só vc criar uma variavel publica pra isso e fazer ela receber o campo permissão e depois ir verificando qual o conteudo dessa variavel
pra modo de teste faça assim
coloque uma variavel no seu form principal( onde estão os menus) chama ela de getpermission
c#
public static string getpermission;
getpermission = [Ô]admin[Ô];
if (getpermission != [Ô]admin[Ô])
{
menucadastro.Enabled = false;
menuimprime.Enabled = false;
menuetc.Enabled = false;
}
else
{
}
isso irá funcionar, agora basta vc fazer o mesmo usando um select no banco de dados, passando o valor por um datareader e fazer
getpermission = dr[[Ô]seucampo[Ô]].ToString();
ou
getpermission = dr.Item[[Ô]seucampo[Ô]].ToString();
não testei os códigos, mas irão funcionar pra vc ter uma idéia de como fazer dessa forma
coloque uma variavel no seu form principal( onde estão os menus) chama ela de getpermission
c#
public static string getpermission;
getpermission = [Ô]admin[Ô];
if (getpermission != [Ô]admin[Ô])
{
menucadastro.Enabled = false;
menuimprime.Enabled = false;
menuetc.Enabled = false;
}
else
{
}
isso irá funcionar, agora basta vc fazer o mesmo usando um select no banco de dados, passando o valor por um datareader e fazer
getpermission = dr[[Ô]seucampo[Ô]].ToString();
ou
getpermission = dr.Item[[Ô]seucampo[Ô]].ToString();
não testei os códigos, mas irão funcionar pra vc ter uma idéia de como fazer dessa forma
O Meu criei varios campos INT(1) na tabela usuario, defino todos os campos visible = false de default na propriedade mesmo
0 -> para não permitido
1 -> para permitido
Daà leio os resultados com um DataReader e faço um:
O que for 0 já vai tar visible=false mesmo então já era..
0 -> para não permitido
1 -> para permitido
Daà leio os resultados com um DataReader e faço um:
If campo = 1 then me.menu1.visible=true
O que for 0 já vai tar visible=false mesmo então já era..
não tenho aki, mas fiz um esquema na unha q achei longo, porem totalmente funcional....
mas no meu caso tem uma tabela menu no BD onde crio o nome do menu, idusuario, e uma opção visÃvel ou não...
mas no meu caso tem uma tabela menu no BD onde crio o nome do menu, idusuario, e uma opção visÃvel ou não...
NICKOSOFT , se puder me passar fico grato
Nicksoft, diferente isso que vc fez..
tem alguma melhoria em desempenho ao metodo tradicional?
joaobenevides, o metodo do meste também funciona, o que vc precisa realmente fazer é checar um campo com if depois de buscar ele com um datareader
tem alguma melhoria em desempenho ao metodo tradicional?
joaobenevides, o metodo do meste também funciona, o que vc precisa realmente fazer é checar um campo com if depois de buscar ele com um datareader
Eu fiz assim, criei um form com todo o menu em botões que muda de cor ao serem clicados
Azul é acesso completo, Vermelho é somente leitura e cinza sem acesso, tb pode ser 1, 2 e 3.
essas cores devem ser salvas no login de cada usuario (salva o código da cor).
Ao entrar no sistema e digitar o usuário e login, basta tratar o menu ou forms conforme as cores do cadastro do usuário.
primeiramente ele restringe os acessos ao menu (cor cinza)
Ao entrar num form ele deverá analisar se aquele form tem acesso azul (acessa tudo ou vermelho (acesso parcial, desabilitando Incluir, Altera, Salvar)
cada usuário terá uma tripa de campos, um para cada form
apenas um usuário master tem acesso a configuração dos acessos.
Bem trabalhado ficou bacana, veja na imagem:
Azul é acesso completo, Vermelho é somente leitura e cinza sem acesso, tb pode ser 1, 2 e 3.
essas cores devem ser salvas no login de cada usuario (salva o código da cor).
Ao entrar no sistema e digitar o usuário e login, basta tratar o menu ou forms conforme as cores do cadastro do usuário.
primeiramente ele restringe os acessos ao menu (cor cinza)
Ao entrar num form ele deverá analisar se aquele form tem acesso azul (acessa tudo ou vermelho (acesso parcial, desabilitando Incluir, Altera, Salvar)
cada usuário terá uma tripa de campos, um para cada form
apenas um usuário master tem acesso a configuração dos acessos.
Bem trabalhado ficou bacana, veja na imagem:
Citação::
NICKOSOFT , se puder me passar fico grato
pode ser q fique mais difÃcil de entender, faço em camadas no mesmo projeto, então to colocando o principal....vou tentar incluir algumas citacoes
[ô]cadastrar os menus
For i = 0 To Me.Controls.Count - 1[ô]for pelos controles simples
If TypeOf Me.Controls(i) Is CheckBox Then[ô]se for os checkbox precisa tratar
Dim IncluirMenu As New clsMenu[ô][ô]chama a classe
IncluirMenu.IdUsuario = Incluir.ID[ô]ja busquei fora do laco o id do usuário recém criado e cadastrado na tabela de usuários...
IncluirMenu.Menu = Me.Controls(i).Name[ô]incluo no campo menu da tabela menu o nome do controle, como ve na imagem, cada checkbox tem o mnublabla o mesmo nome do menu no form principal....
Dim objeto As CheckBox[ô]trato pra obter o estado do check e salvar
objeto = Me.Controls(i)
If objeto.Checked = True Then
IncluirMenu.Enable = False
Else
IncluirMenu.Enable = True
End If
IncluirMenu.Incluir()[ô]efetivando a inclusão das informacoes
End If
Next
no form principal, o inicio do código, pq é enorme e cresce conforme tiver mais menus....
Dim Sql As String = [Ô]select * from menu where idusuario=@idusuario[Ô]
Dim ds As DataSet
ds = Busca.RetornaDS(Sql, parametrosNomes, parametrosValores)
If ds.Tables(0).Rows.Count > 0 Then
For i = 0 To ds.Tables(0).Rows.Count - 1
Select Case ds.Tables(0).Rows(i).Item([Ô]menu[Ô]).ToString.ToLower
Case [Ô]mnumatriculas[Ô]
If ds.Tables(0).Rows(i).Item([Ô]enable[Ô]).ToString = False Then
mnuMatriculas.Enabled = False
Else
mnuMatriculas.Enabled = True
End If
Case [Ô]mnumatricula[Ô]
If ds.Tables(0).Rows(i).Item([Ô]enable[Ô]).ToString = False Then
mnuMatricula.Enabled = False
Else
mnuMatricula.Enabled = True
End If
vejam não sei se é o mais certo ou mais pratico, talvez mais eficiente, mas considero de alta flexibilidade....não vou criar grupos de usuários, cada usuário criado pode ter seu perfil único......
Tópico encerrado , respostas não são mais permitidas