O menu de Login não terá restrição, mas criaremos menus que serão restritos pelo nível de acesso do usuário.
Crie o menu Manutenção e o item Banco de Dados no form principal, e também o menu Usuários com os itens Novo Usuário e Gestão de Usuários, e o menu Alunos com o item Novo Aluno, altere os names deles. Os mmenus Manutenção e Usuários serão restritos.
No evento do Banco de Dados, coloque esse código:
if(Global.logado) {
if(Global.nivel >= 3) {
// Procedimentos padrões e serem inseridos posteriormente.
}
else {
MessageBox.Show("Acesso Não-Permitido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else {
MessageBox.Show("É Necessário ter um Usuário Logado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Faça o mesmo nos itens Novo Usuário e Gestão de Usuários, mas com o nível 2.
No item novo aluno, faça assim:
if(Global.logado) {
// Procedimentos padrões:
}
else {
MessageBox.Show("É Necessário ter um Usuário Logado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Teste mudando o cadastro do SQLite o nível do usuário inserido.
Crie a tela Windows Form para cadastro de usuários com o nome NovoUsuario. Crie os labels e caixas de textos para Nome, Usuário, Senha (coloque o password Char), Status (Pode ser um combobox) e Nível (esse use um numeric up down). Altere os names deles. No combobox teremos os itens A (ativo), B (bloqueado) e D (desligado). Adicione os botões Novo, Salvar e Cancelar e mude os names deles.
PS: No combobox, para definir um item como padrão, coloque no construtor do form Novo Usuário, a linha cbStat.SelectedIndex = 2;
(contado a partir do zero).
No form principal, mude o código do evento novo usuário assim:
if(Global.logado) {
if(Global.nivel >= 2) {
NovoUsuario novoUser = new NovoUsuario();
novoUser.ShowDialog();
}
else {
MessageBox.Show("Acesso Não-Permitido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else {
MessageBox.Show("É Necessário ter um Usuário Logado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Voltando ao form Novo Usuário, vamos fazer de maneiras diferentes as inserções de dados no banco.
Crie uma classe com o nome Usuario, assim:
class Usuario {
public int id;
public string nome;
public string username;
public string senha;
public string status;
public int nivel;
}
No form Novo Usuário, coloque o evento nos botões. Esse é o código do botão Salvar:
Usuario user = new Usuario();
user.nome = txtNome.Text.Trim();
user.username = txtUser.Text.Trim();
user.senha = CriptSenha.encripta(txtSenha.Text.Trim(), "SHA-1");
user.status = cbStat.Text.ToCharArray()[0].ToString();
user.nivel = (int)numNiv.Value;
Na classe Banco, coloque esse método:
// Funções do form Novo Usuário:
public static void novoUser(Usuario user) {
if(existUser(user)) {
MessageBox.Show("Username já Existe!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try {
SQLiteCommand comando = conexaoBanco().CreateCommand();
comando.CommandText = "insert into usuario (nome, username, senha, status, nivel) values (@nome, @username, @senha, @status, @nivel)";
comando.Parameters.AddWithValue("@nome", user.nome);
comando.Parameters.AddWithValue("@username", user.username);
comando.Parameters.AddWithValue("@senha", user.senha);
comando.Parameters.AddWithValue("@status", user.status);
comando.Parameters.AddWithValue("@nivel", user.nivel);
comando.ExecuteNonQuery();
MessageBox.Show("Novo Usuário Inserido!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
conexaoBanco().Close();
}
catch(Exception ex) {
MessageBox.Show($"ERRO: {ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
conexaoBanco().Close();
}
}
public static bool existUser(Usuario user) {
bool res;
SQLiteDataAdapter dataAp = null;
DataTable dataTab = new DataTable();
SQLiteCommand comando = conexaoBanco().CreateCommand();
comando.CommandText = "select * from usuario where username = @username";
comando.Parameters.AddWithValue("@username", user.username);
comando.CommandType = CommandType.Text;
dataAp = new SQLiteDataAdapter(comando.CommandText, conexaoBanco());
dataAp.SelectCommand = comando;
dataAp.Fill(dataTab);
if(dataTab.Rows.Count == 1) {
res = true;
}
else {
res = false;
}
conexaoBanco().Close();
return res;
}
Continuando o código anterior, complete o código do evento de Salvar:
Usuario user = new Usuario();
user.nome = txtNome.Text.Trim();
user.username = txtUser.Text.Trim();
user.senha = CriptSenha.encripta(txtSenha.Text.Trim(), "SHA-1");
user.status = cbStat.Text.ToCharArray()[0].ToString();
user.nivel = (int)numNiv.Value;
if(!txtNome.Text.Trim().Equals("") && !txtUser.Text.Trim().Equals("") && !txtSenha.Text.Trim().Equals("")) {
Banco.novoUser(user);
}
else {
MessageBox.Show("Preencha Todos os Campos!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
No evento do novo, basta colocar isso:
txtNome.Clear();
txtUser.Clear();
txtSenha.Clear();
cbStat.Text = "Desligado";
numNiv.Value = 1;
txtNome.Focus();
E no do Cancelar basta dar um this.Close()
.
Adicione um formulário Windows Form no projeto com o nome GestaoUsuarios. Copie os labels, campos e etc (menos os botões). do Novo Usuário para o Gestão Usuários. Coloque um campo com o id txtId, que terá o tabStop como false e ReadOnly com true. Coloque um panel com o dock bottom e acima dele, logo abaixo dos campos, coloque um DataGridView. Dentro do panel colocar os botões Novo Salvar e Excluir. Altere o name do DataGridView para dgvUser e desabilite todas as opções marcadas na "setinha".
Adicione também no construtor de gestão de usuários a linha cbStat.SelectedIndex = 2;
.
No Form principal, altere o evento de Gestão de Usuários assim:
if(Global.logado) {
if(Global.nivel >= 2) {
GestaoUsuarios gestUser = new GestaoUsuarios();
gestUser.ShowDialog();
}
else {
MessageBox.Show("Acesso Não-Permitido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else {
MessageBox.Show("É Necessário ter um Usuário Logado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}