hernan 0 Denunciar post Postado Setembro 25, 2006 Olá pessoa do Imasters:Esse aqui é meu primeiro post aqui neste forum.Estou querendo sabe e fazer um sistema de login que tenha níveis de segurança para por no site que estou desenvolvendo em PHP+MYSQL, so aque ate agora o que encontrei nos post do forum, é sitema com sessions, etc mas nada com níveis de usuários tipo:- admin;- usuarios avançados;- usuarios comuns.Para restringir acessos a cadastros e tal, que tenham certo tipo de restrição na pagina com login e que depois mostre todos os usuários que estao logados no site....Será que alguem pode me ajudar???Fico grato desde já Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 25, 2006 Seja bem vindo!Primeira dica: você provavelmente vai usar sessions mesmo. A idéia principal é você criar uma variável de sessão com o nível de permissão do usuário no momento do logon e verificar em todas as páginas q ele acessar.Se puder, faça um classe para controlar isso q fica mais fácil de reutilizar em outros sistemas. E tb para postar depois no Laboratório de Scripts. Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 25, 2006 Vlw pessoal pelos post tao rápidos: (tmferreira, ignorante) vle mesmoSim, gostaria de fazer um, para depois ajudar outras pessoas que estejam com o mesmo problema que eu tenho....E sim vai ter que ter níveis de acesso....isso é necessário mesmo.Vcs podem me ajudar???Muito obrigado pela ajuda Compartilhar este post Link para o post Compartilhar em outros sites
Jonas Rodrigues 1 Denunciar post Postado Setembro 25, 2006 Já precisei desenvolver um sistema de login com níveis de acesso parecido com esse que você quer.O que eu fiz foi fazer os menus do sistema virem todos do banco de dados, assim eu tinha uma terceira tabela onde eu cadastrava as permissões dos usuários, entende, tinha o id do usuário, e os id's dos menus que ele poderia acessar.abs. Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 25, 2006 Olá Jonas:Eu tb tenho um sistema de menu , onde todo o menu vem de um banco de dados..... entao é a minha pergunta:como faço um sistema de logim onde quando ele entre com o logim e senha, caia na pagina destinada a ele, tipo se for admin que apareçam todos os menus, e se for outro usuario, que caia na pagina e que restringa os menus de acordo com o nível dele.... e que depois mostre pode ser na index mesmo todos os usuários que estao logados no momento. Compartilhar este post Link para o post Compartilhar em outros sites
Jonas Rodrigues 1 Denunciar post Postado Setembro 25, 2006 Bom, pra controlar os acessos, você vai ter que ter uma tabela de permissões, onde você vai colocar o id do usuário e o id os id's dos menus que ele tem acesso, pra isso você pode até criar uma telinha pra cadastrar essas permissões, onde você lista todos os menus e seleciona quais o usuário pode ter acesso, então você cadastra na tabela de permissões, aí quando você for montar o menu, você faz um join nessa tabela pra pegar somente os menus que o usuário que está logando tem acesso.Agora pra ver quem ta on-line, você tem que jogar o usuário que logar numa tabela de usuários on-line, e quando ele sair você deleta ele de lá, ou então simplesmente coloca um flag na tabela de usuários informando se ele está on-line ou off.Abs. Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 25, 2006 Olá tmferreira:fiz a tabela da seguinte maneira:create table admin ( id int not null auto_increment,nom_usr varchar(40) not null,login_usr varchar(11)not null,senha_usr varchar(8)not null,nivel_usr varchar(10),ip_usr varchar(15),hora_ult_ativi time,PRIMARY KEY (id));certo?e agora?pronto para o segundo passoGrato Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 25, 2006 OI Eu tenho este sistema de login....onde somente é um sitema de login, tipo nao é so digitar usuario e senha, ele nao é com níveis de usuario, eu queria aproveirtar ele....da uma olhada nele e ve se da pra aproveitar... login.php <?import_request_variables("gp","tx");if (isset($txuser)){$user = $txuser;$pass = $txpass;$status = authenticate($user, $pass);if ($status == 1) { session_start(); session_register("SESSION"); session_register("SESSION_UNAME"); $SESSION_UNAME = $user; header("Location: admin.php"); exit(); }else{ //echo"Você está tentado acessar uma página restrita !"; header("Location: logar.php"); exit(); }}else{ header("Location: logar.php"); exit();}function authenticate($theuser, $thepass) {include("config.php"); $query = "SELECT id from admin WHERE login_usr = '$theuser' AND senha_usr = PASSWORD('$thepass')"; mysql_select_db(banco) or die("Unable to select database!"); $result = mysql_query($query, $conec) or die ("Error in query: $query. " . mysql_error()); if (mysql_num_rows($result) == 1) { return 1; } else { return 0; }}?>ve se da certo... Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 25, 2006 Nao use session_register(), essa função esta obsoleta e insegura Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 25, 2006 Nao use session_register(), essa função esta obsoleta e inseguraEu costumo usar $_SESSION["usuario"], mas sinceramente não sei se é a maneira mais adequada. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 25, 2006 Ta certo, para usar session_register(), session_is_registered() e session_unregister() a register_globals precisa estar em on, mas por segurança ele esta em off desda versao 4.2.x Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 25, 2006 session_register(): $_SESSION["usuario"] = "ignorante"session_is_register(): isset($_SESSION["usuario"])session_unregister(): $_SESSION["usuario"] = nullé isso? Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 26, 2006 Podemos utilizar esse ou esse: http://forum.imasters.com.br/index.php?showtopic=147566 Se formos utilizar esse, vamos fazer algumas alterações: function authenticate($theuser, $thepass) {include("config.php"); $query = "SELECT id from usuarios WHERE login_usr = '$theuser' AND senha_usr = md5('$thepass')"; mysql_select_db(banco) or die("Unable to select database!"); $result = mysql_query($query, $conec) or die ("Error in query: $query. " . mysql_error()); if (mysql_num_rows($result) == 1) { $row = mysql_fetch_row($result); return $row[0]; } else { return false; }} if ($status) { session_start(); $_SESSION['id'] = $status; header("Location: admin.php"); exit(); }else{ //echo"Você está tentado acessar uma página restrita !"; header("Location: logar.php"); exit(); }}else{ header("Location: logar.php"); exit();}A partir de agora, vou instruindo e você fazendo ok? OU tmferreira você nao vai utilizar esta parte: if (isset($txuser)){ $user = $txuser; $pass = $txpass; $status = authenticate($user, $pass); que vem do formulario onde pede o usuário e a senha? Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 26, 2006 hernan, leia mais atentamente meu post. Iremos fazer algumas alterações. O resto continua. OK desculpe por nao prestar atenção. OK. fiz desse jeito que você falou Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 26, 2006 function nivel($id){include ("config.php"); $sql = "SELECT nivel_usr from usuarios where id = $id"; mysql_select_db(banco) or die("Impossivel selecionar uma base de dados, favor contatar o administrador!"); $result = mysql_query($sql) or die ("Error in query: $query. " . mysql_error());if (mysql_num_rows($result) == 1) { $row = mysql_fetch_row($result); return $row[0]; } else { return false; }} Seria esta a função??? ve se esta correta. Grato pela ajuda Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 26, 2006 Modificando... function nivel($id){ require_once("config.php"); $sql = "SELECT nivel_usr from usuarios where id = '" . $id . "'"; mysql_select_db(banco) or die("Impossivel selecionar uma base de dados, favor contatar o administrador!"); $result = mysql_query($sql) or die ("Error in query: $query. " . mysql_error()); if (mysql_num_rows($result) == 1) { $row = mysql_fetch_row($result); return $row[0]; } else { return false; }}Agora vamos utilizar uma classe para conexão com o BD. Crie uma ou pegue uma do seu gosto no Laboratório de Scripts.É importante que se abra o BD, faça a query e o feche. Não tem necessidade de ficar aberto.Dependendo da versão do seu PHP, podemos usar a classe de conexão com o MySQLi, do Fabyo.Desculpa tmferreira, mas nao entende nada de classe de conexao e vi a do Fabyo, mas nao entendi nada do que la ta escrito, gostaria de entender melhor e saber pra que é precisso uma classe de conexao...Grato Compartilhar este post Link para o post Compartilhar em outros sites
hernan 0 Denunciar post Postado Setembro 26, 2006 ok, despois no fim nos podemos melhorar ele, concordo com você plenamente.Bom, ja fiz isso que você me falou, ja criei o funcoes.php, outra aquela função que criei para verificar o nível do usuário que vem do form login. onde vou colocar ela?Grato Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 26, 2006 Só recomendo proteger melhor o sql para evitar ataques uma ideia é +- isso: settype($id, 'integer'); $sql = "SELECT nivel_usr from usuarios where id = $id"; Compartilhar este post Link para o post Compartilhar em outros sites
MetalDragonX 0 Denunciar post Postado Setembro 26, 2006 tava olhando o codigo que vcs estão passando pra o herman e notei que apos fazer uma conexão ao DB logo apos fazer a consulta fas a desconexão.A pergunta é:o que mudaria desconectar do db?se ficar conectando e desconectando toda vez que for ter um acesso ao DB, tornaria o servidor mais lento? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 26, 2006 Simples voce usando a conexao somente na hora que for usar e fechando em seguida, voce na verdade deixa o acesso ao banco muito mais tempo livre, imaginando um sistema de muitos usuarios conectados evitaria estouros de limites de conexao, o banco de dados tem que ficar fechado sempre, e só abre na hora de usar e outros detalhes mechendo no proprio sistema é fazer conexoes, e selects bem utilizados por exemplo usando POSTBACK, evitando assim conectar no banco varias vezes sem necessidade, por exemplo você monta um combobox com dados de um banco, mas nao precisa toda hora que der F5 conectar no banco e refazer a conexao montando o combo toda hora, você pode fazer isso somente a primeira visita na pagina o resto ele salvaria e manteria as informações Compartilhar este post Link para o post Compartilhar em outros sites