문제

새로운 WebProject에서 사용할 수있는 프레임 워크를 찾고 있습니다.

저의 주요 관심사는 사용자를 처리하는 것입니다. 따라서 저를 위해 처리 할 수있는 프램 워크를 찾고 있습니다. 나는 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 [ 'username'], $ _post [ 'password']);

그리고 당신은 그룹 테이블 내부에 그룹을 만들 수 있습니다.

$ Membership-> getUserPerMissions ($ username);

그런 다음 반환 된 $ 멤버십-> 권한 값에 따라 다음과 같은 일을 할 수 있습니다.

스위치 ($ 멤버십-> 권한) {

}

다른 팁

전체 CMS를 원하지 않는다면 Zend 프레임 워크 드롭 인 구성 요소에 탁월합니다.

zend_acl, zend_auth 및 zend_session 구성 요소에 가장 관심이 있습니다.

나는 이것이 당신이 찾고있는 것이기를 바랍니다.

이것은 당신이 사용할 수있는 프로젝트입니까? 드 루팔 을 위한? 나는 Drupal 프레임 워크가 사용자 관리/권한 등을 처리하는 방식에 항상 깊은 인상을 받았습니다. 물론, PHP 기반이므로 집에서 바로 느껴져야합니다.)

본격적인 CMS가 필요한지 모르겠지만 트릭을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top