سؤال

أنا أبحث عن إطار يمكنني استخدامه في الويب الخاص بي الجديد.

يعالج الاهتمام الرئيسي بالنسبة لي لمستخدمي، وبالتالي فإنني على مراقبة لأعمال Framwork التي يمكن أن تتعامل معها بالنسبة لي. أنا أتطور في PHP، ويفضل أن تكون اللغة التي يجب استخدامها.
أود أن يعتني الإطار بعناية مستخدمين جدد في التسجيل وأود أيضا أن أتعامل مع الجلسات وعملية المصادقة.

أي نوع من الخيارات لدي، وما الذي يوصي به الناس؟

هل كانت مفيدة؟

المحلول

إذا كان الشيء الوحيد الذي تريد القيام به هو إدارة المستخدم، فيمكنك استخدام بعض المكتبات (الفئات) بدلا من الإطار الكامل، لأنه لا يوجد شيء (بقدر ما أعرف) المسمى الإطار لإدارة المستخدمين فقط .. أنا أعمل الآن قم بإجراء إطار يسمى 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));

واستخدام هذه الفئة: بناء نموذج ثم

عضوية $ = عضوية جديدة ()؛

تسجيل الدخول: عضوية $-> تسجيل الدخول ($ _ Post [اسم المستخدم "]، $ _Post [كلمة المرور"])؛

ويمكنك بناء مجموعات داخل جدول المجموعات ثم

عضوية $-> GetUserPermissions (اسم مستخدم $)؛

ثم يمكنك القيام بشيء بناء على قيمة الأذونات التي تم إرجاعها -> أذونات مثل:

التبديل (عضوية $-> أذونات) {

}

نصائح أخرى

إذا كنت لا تريد CMS كاملة، zend framework. ممتاز للمكونات المنسدلة.

ستكون أكثر اهتماما بمكونات zend_acl و zend_Auth و zend_session.

آمل أن يكون هذا ما تبحث عنه.

هل هذا مشروع يمكنك استخدامه دروبال بالنسبة؟ لقد تأثرت دائما بالطريقة التي تعالج إطار drupal إدارة المستخدم / امتيازات المستخدم، إلخ ... بالطبع، فهو PHP مقرها، لذلك يجب أن تشعر بالحق في المنزل؛)

لا أعرف إذا كنت بحاجة إلى CMS كاملة، ولكن قد تفعل الخدعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top