Pregunta

Estoy buscando un marco que puedo usar en mi nuevo webproject.

La principal preocupación para mí es el manejo de mis usuarios, por lo tanto, estoy en la búsqueda de un framwork que puede manejar por mí. I desarrollar en PHP, por lo que preferentemente ese es el idioma que debe utilizar.
Me gustaría que el marco para cuidar de nuevos usuarios que se registran y también me gustaría que le permite manejar las sesiones y proceso de autenticación.

¿Qué tipo de opciones tengo, y lo recomiendo a la gente?

¿Fue útil?

Solución

Si lo único que quieres hacer es la gestión de usuarios entonces puede usar algunas bibliotecas (clases) en lugar de marco completo, porque no hay nada (por lo que yo sé) llamado marco para la gestión de usuarios única .. Ahora estoy trabajando para hacer un marco llamado aiki, y es GPL, por lo que aquí es la clase que escribí para la gestión de usuarios que puede ayudarle a

<?php
    class membership
    {
        var $permissions;
        var $full_name;
        var $username;
        var $group_level;

        function membership(){
            session_start();
        }

        function login ($username, $password){
            global $db, $layout;


            $password = stripslashes($password);
            $password = md5(md5($password));


            $get_user = $db->get_row("SELECT * FROM aiki_users where username='".$username."' and password='".$password."' limit 1");

            if($get_user->username == $username and $get_user->password == $password){

                $host_name = $_SERVER['HTTP_HOST'];
                $user_ip = $this->get_ip();


                $usersession = $this->generate_session(100);
                $_SESSION['aiki'] = $usersession;

                $insert_session = $db->query("INSERT INTO aiki_users_sessions (`session_id`,`user_id`,`user_name`,`session_date`,`user_session`, `user_ip`) VALUES ('','$get_user->userid','$username',NOW(),'$usersession','$user_ip')");
                $update_acces = $db->query("UPDATE `aiki_users` SET `last_login`= NOW(),`last_ip`='$user_ip', `logins_number`=`logins_number`+1 WHERE `userid`='$get_user->userid' LIMIT 1");

            } else{
            }

        }

        function isUserLogged ($userid){
            global $db;
            $user_session = $db->get_var("SELECT user_id FROM aiki_users_sessions where user_session='$_SESSION[aiki]'");
            if ($user_session == $userid){
                return true;
            }else{
                return false;
            }
        }

        function getUserPermissions ($user){
            global $db;
            $user = mysql_escape_string($user);

            $user = $db->get_row("SELECT userid, usergroup, full_name, username FROM aiki_users where username='$user'");
            if ($user->userid and $this->isUserLogged($user->userid)){
                $group_permissions = $db->get_row("SELECT group_permissions, group_level FROM aiki_users_groups where id='$user->usergroup'");

                $this->full_name = $user->full_name;
                $this->username = $user->username;
                $this->group_level= $group_permissions->group_level;


            }else{
                $this->permissions = "";
            }

            $this->permissions = $group_permissions->group_permissions;
        }

        //function from Membership V1.0
        //http://AwesomePHP.com/gpl.txt
        function get_ip(){
            $ipParts = explode(".", $_SERVER['REMOTE_ADDR']);
            if ($ipParts[0] == "165" && $ipParts[1] == "21") {
                if (getenv("HTTP_CLIENT_IP")) {
                    $ip = getenv("HTTP_CLIENT_IP");
                } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
                    $ip = getenv("HTTP_X_FORWARDED_FOR");
                } elseif (getenv("REMOTE_ADDR")) {
                    $ip = getenv("REMOTE_ADDR");
                }
            } else {
                return $_SERVER['REMOTE_ADDR'];
            }
            return $ip;
        }

        //Generate session
        function generate_session($strlen){
            return substr(md5(uniqid(rand(),true)),1,$strlen);
        }



        function LogOut(){
            global $db, $layout;
            $domain = $_SERVER['HTTP_HOST'];
            $path = $_SERVER['SCRIPT_NAME'];
            $queryString = $_SERVER['QUERY_STRING'];
            $thisurlnologout = "http://" . $domain . $path . "?" . $queryString;
            $thisurlnologout = str_replace("&operators=logout", "", $thisurlnologout);

            $make_offline = $db->query("UPDATE `aiki_guests` SET `is_online`='0' WHERE `guest_session`='$_SESSION[aiki]' LIMIT 1");
            $delete_session_data = $db->query("DELETE FROM aiki_users_sessions where user_session='$_SESSION[aiki]'");
            unset($_SESSION['aiki']);
            session_destroy();
            session_unset();
            $layout->html_output .= '<META HTTP-EQUIV="refresh" content="1;URL=http://'.$domain.$path.'"><center><b>Logging out</b></center>';
            //die();
        }

    }
?>

y aquí es un simple volcado SQL para ese

CREATE TABLE IF NOT EXISTS `aiki_guests` (
  `userid` int(9) unsigned NOT NULL auto_increment,
  `first_login` datetime NOT NULL,
  `last_hit` datetime NOT NULL,
  `last_hit_unix` int(11) NOT NULL,
  `ip` varchar(40) NOT NULL,
  `last_ip` varchar(40) NOT NULL,
  `username` varchar(255) NOT NULL,
  `guest_session` varchar(255) NOT NULL,
  `hits` int(11) NOT NULL,
  `is_online` int(11) NOT NULL,
  PRIMARY KEY  (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=54 ;

-- --------------------------------------------------------

--
-- Table structure for table `aiki_users`
--

CREATE TABLE IF NOT EXISTS `aiki_users` (
  `userid` int(9) unsigned NOT NULL auto_increment,
  `username` varchar(100) NOT NULL default '',
  `full_name` varchar(255) NOT NULL,
  `country` varchar(255) NOT NULL,
  `sex` varchar(25) NOT NULL,
  `job` varchar(255) NOT NULL,
  `password` varchar(100) NOT NULL default '',
  `usergroup` int(10) NOT NULL default '0',
  `email` varchar(100) NOT NULL default '',
  `avatar` varchar(255) NOT NULL,
  `homepage` varchar(100) NOT NULL default '',
  `first_ip` varchar(40) NOT NULL default '0',
  `first_login` datetime NOT NULL,
  `last_login` datetime NOT NULL,
  `last_ip` varchar(40) NOT NULL,
  `user_permissions` text NOT NULL,
  `maillist` int(1) NOT NULL,
  `logins_number` int(11) NOT NULL,
  `randkey` varchar(255) NOT NULL,
  `is_active` int(5) NOT NULL,
  PRIMARY KEY  (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

-- --------------------------------------------------------

--
-- Table structure for table `aiki_users_groups`
--

CREATE TABLE IF NOT EXISTS `aiki_users_groups` (
  `id` int(3) NOT NULL auto_increment,
  `app_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `group_permissions` varchar(255) NOT NULL,
  `group_level` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

-- --------------------------------------------------------

--
-- Table structure for table `aiki_users_sessions`
--

CREATE TABLE IF NOT EXISTS `aiki_users_sessions` (
  `session_id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `user_name` varchar(255) NOT NULL,
  `session_date` datetime NOT NULL,
  `user_session` varchar(255) NOT NULL,
  `user_ip` varchar(100) NOT NULL,
  PRIMARY KEY  (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Ahora todo lo que necesita es añadir el PP y crear usuarios dentro de él recuerde que usted tendrá que MD5 de la contraseña dos veces, como:

$password = "what ever";
$password = md5(md5($password));

y utilizar esta clase: construir un formulario y luego

$ = membresía nuevos miembros ();

ingreso: $ Membresía-> inicio de sesión ($ _POST [ 'nombre de usuario'], $ _POST [ 'password']);

y puede crear grupos dentro de la tabla a continuación, los grupos

$ membresía-> getUserPermissions ($ nombre de usuario);

A continuación, se puede hacer algo basado en el> valor devuelto $ membresía- permisos como:

interruptor ($ membresía-> permisos) {

}

Otros consejos

Si usted no quiere un CMS completo, el rel="nofollow Zend Framework es excelente para drop-in componentes.

Usted sería el más interesado en el Zend_Acl, Zend_Auth, y los componentes Zend_Session.

Espero que esto es lo que estás buscando.

¿Es este un proyecto que se puede utilizar Drupal para ? Siempre he estado impresionado con la forma en que el marco de Drupal se encarga de gestión / privilegios de usuario, etc ... Por supuesto, es basado en PHP, por lo que debe sentirse como en casa;)

No sé si necesita un CMS en toda regla, pero puede hacer el truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top