Я ищу рамки, которые я могу использовать в своем новом веб-проекте.
Основная забота для меня – это обращение с моими пользователями, поэтому я нахожусь в поиске каркаса, который может обрабатывать их для меня. Я развиваюсь на PHP, поэтому желательно, чтобы это был язык, который он должен использовать.
Я хотел бы, чтобы структура позаботилась о регистрации новых пользователей, и мне также хотелось бы обработать сеансы и процесс аутентификации.
Какие варианты у меня есть, и что люди рекомендуют?
если единственное, что вы хотите сделать, – это управление пользователями, то вы можете использовать некоторые библиотеки (классы) вместо полной структуры, потому что нет (насколько мне известно) структуры, называемой framework для управления пользователями. Я сейчас работаю создайте структуру под названием aiki, и это gpl, так что вот класс, который я написал для управления пользователями, это может помочь вам
<?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(); } } ?>
и вот простой дамп sql для этого
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 ;
теперь вам нужно только добавить db и создать пользователей внутри, помните, что вам нужно будет дважды ввести пароль md5, например:
$password = "what ever"; $password = md5(md5($password));
и использовать этот класс: построить форму, затем
$ membership = новое членство ();
Логин: $ membership-> login ($ _ POST ['username'], $ _POST ['password']);
и вы можете создавать группы внутри таблицы групп, тогда
$ Membership-> getUserPermissions ($ имя пользователя);
то вы можете делать вещи на основе возвращаемого значения $ membership-> permissions, например:
switch ($ membership-> permissions) {
}
Если вам не нужна полная CMS, Zend Framework отлично подходит для компонентов с добавлением компонентов.
Вас больше всего интересуют компоненты Zend_Acl, Zend_Auth и Zend_Session.
Надеюсь, это то, что вы ищете.
Это проект, для которого вы можете использовать Drupal ? Я всегда был впечатлен тем, как платформа Drupal обрабатывает пользовательские права / привилегии и т. Д. Конечно, это основанная на php, поэтому вы должны чувствовать себя как дома;)
Я не знаю, нужна ли вам полноценная CMS, но это может сделать трюк.