Jump to content

[Resolvido] Login com Níveis de Permissões


reznor
 Share

Recommended Posts

Bom dia!

Estou na fase final de um projeto onde tenho de construir um sistema de login (ler da BD) com niveis de permissões, são 3 niveis :

- SuperUser

- Administrador

- Utilizador normal

Queria que me dessem umas luzes visto que nao faço a menor ideia de como hei de definir os niveis de acesso :\

Obrigado desde já

Edited by reznor
Link to comment
Share on other sites

Uma coluna do tipo inteiro na tabela de utilizadores.

Uma coluna do tipo inteiro na tabela de utilizadores.

Sim, para cada utilizador atribuir um inteiro! até ai cheguei eu, a questão é como dou permissoes aos inteiros, ou seja, se for SA = 1, quero que tenha acesso a tudo da aplicação, se for Admin = 2, só quero que aceda a um determinado numero de coisas, e utilizador normal idem. Aí é que é a minha duvida

Link to comment
Share on other sites

Se tens um menu, ao desenhar o menu so desenhas as opções caso o grupo do utilizador tenha acesso.

Ou então desenhas mas desligas.

Ao entrar num form, escondes as opções que o grupo do utilizador não possa ver

Ou seja, faço uma verificação d inteiro que associei a cada registo e a partir daí crio um IF para cada caso, é isso nao é?

Link to comment
Share on other sites

No geral será isso sim.

Mas o melhor é criares uma constante global para cada nivel, de modo a não teres números mágicos espalhados pela aplicação 😄

Já percebi!

Precisava era de uma ajuda agora!

Tenho um form de login com as textboxes de nome e password. Depois de logar corretamente lanço o mainform, só que queria que o nome do utilizador que foi introduzido na textbox de nome ficasse num label, para dar aquele efeito de "Bem vindo: +nomedeutilizador+" só que não estou a conseguir passar :\

Como é que consigo fazer um get disso?

class Dados
{
 static public string nome { get; set; }
 static public string password { get; set; }
 static public Int32 nivel { get; set; }
}

criei essa classe para fazer get e set dos valores, será que dá para ir por aí?

Link to comment
Share on other sites

Então estás a tentar fazer como?

Coloca aquela classe (dados) numa class geral e quando fazes login preenches os dados do utilizador (classegeral.Dados.nome=txtUtilizador.Text...).

Em qualquer sitio da aplicação depois consegues ir buscar os dados usando sempre classegeral.Dados.nome

Link to comment
Share on other sites

Então estás a tentar fazer como?

Coloca aquela classe (dados) numa class geral e quando fazes login preenches os dados do utilizador (classegeral.Dados.nome=txtUtilizador.Text...).

Em qualquer sitio da aplicação depois consegues ir buscar os dados usando sempre classegeral.Dados.nome

Vou-te explicar como tenho estado a tentar, não percebo muito desta parte de c# :\

Tenho este código no botão de LOGIN:

private void button1_Click(object sender, EventArgs e)
 {
	 login();
	 Dados.nome = textBox1.Text;
	 Dados.password = textBox2.Text;

 }

O Login() é isto:

public void login()
 {
	 try
	 {
		 string utilizadores = "Select * FROM Utilizador where Nome=@Nome";
		 SqlConnection conn;
		 SqlCommand cmd;
		 SqlDataReader dr;
		 conn = new SqlConnection(Ligacao.cn);
		 conn.Open();
		 cmd = new SqlCommand(utilizadores, conn);
		 cmd.Parameters.Add(new SqlParameter("@Nome", textBox1.Text));
		 dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
		 while (dr.Read())
		 {
			 Dados.nome = Convert.ToString(dr["Nome"]);
			 Dados.password = Convert.ToString(dr["Password"]);
			 Dados.nivel = Convert.ToInt32(dr["Nivel"]);
		 }
		 conn.Close();
		 if (Dados.password == textBox2.Text)
		 {
			 FMP = true;
			 this.Dispose();

		 }
		 else
		 {
			 MessageBox.Show("Login Incorrecto!");
			 FMP = false;
		 }
	 }
	 catch (Exception ex)
	 {
		 MessageBox.Show("ERRO" + ex);
	 }
 }

E depois tive de criar isto no Program.cs

static class Program
{
 /// <summary>
 /// The main entry point for the application.
 /// </summary>
 [sTAThread]
 static void Main()
 {
	 Application.EnableVisualStyles();
	 Application.SetCompatibleTextRenderingDefault(false);

	 FormAutenticacao fau = new FormAutenticacao();
	 fau.ShowDialog();
	 if (fau.FMP == true)
	 {
		 Application.Run(new MainForm());

	 }
 }
}

Isto funciona tudo certinho, o que já me dá um perfil. A questão é que queria que passasse o nome para partir dai eu conseguir ir buscar tudo, mas nao estou a conseguir pensar direito na forma como passar o valor do nome para um label, o que me deixa um bocado frustrado xD

Julgo que me falte algo no MainForm para meter o nome no label, mas tambem não estou a conseguir chegar lá, estou um bocado queimado

obrigado pela ajuda

Link to comment
Share on other sites

Boas, tens uma maneira fácil de fazer isso. Podes criar uma class deste tipo:

Form1 (login):

string nome = textBox1.Text;
Form2 f2 = new Form2(nome);

Form2:

public Form2(string nome)
 {
	 InitializeComponent();
	 textBox1.Text = nome;
 }

e assim passei um valor de uma textbox para outra... agora é só adaptares 🙂

Link to comment
Share on other sites

Boas, tens uma maneira fácil de fazer isso. Podes criar uma class deste tipo:

Form1 (login):

string nome = textBox1.Text;
Form2 f2 = new Form2(nome);

Form2:

public Form2(string nome)
 {
	 InitializeComponent();
	 textBox1.Text = nome;
 }

e assim passei um valor de uma textbox para outra... agora é só adaptares 🙂

Obrigado pela sua reposta, mas decidi criai algo do genero:

Classe Dados

class Dados
{
 static public string nome { get; set; }
 static public string password { get; set; }
 static public Int32 nivel { get; set; }
}

e depois uma classe Global:

class Globals
{
 public static string Username { get; set; }
}

Depois na condição do Form Autenticação coloquei a associação:

if (Dados.password == textBox2.Text)
		 {
                Globals.Username = Dados.nome;
			 FMP = true;
			 this.Dispose();
		 }

E depois foi só ir ao MainForm e associar ao label (FormLoad):

	 toolStripLabel2.Text ="Bem Vindo: " + Globals.Username;

Obrigado a todos, e aproveito para deixar a solução para quem estiver à rasca como eu 😄

Edited by reznor
Link to comment
Share on other sites

Eu também gosto mais de passar os dados por class.

A forma como expliquei é mais confusa se a nossa intenção for passar mais que 1 ou 2 valores por esta forma... fica uma confusão de declarações de variáveis.

Pois, assim como fiz fica sempre disponível! É como uma session ID do php 😄

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.