i wrote a simple easy class,
please give me some advise and help my skills,
thank you^_^

(using 'DB/DataObject.php,Smarty...)

<?php

require_once('DB/DataObject.php');
define('AUTH_PREFIX','__auth__');

class Auth
{
    var $_sessionname;
    var $name;
    var $login_time;

    function &singleton($name,$sessionname) {
        static $instance;
        if (!isset($instance)) {
            $instance = new Auth($name,$sessionname);
        }
        return $instance;
    }
    function Auth($name,$sessionname)
    {
        $this -> _sessionname = $sessionname;
        $this -> name = $name;
        $this -> login_time = time();
    }

    function &knock($name,$prefix = null)
    {
        if(empty($prefix))  $prefix = AUTH_PREFIX;
        $session_name = $prefix.$name;
        if(empty($_SESSION[$session_name]))
        {
            $auth = false;
            $redir = $_SERVER['REQUEST_URI'];
            Auth::_gologin($name,$redir);
        }else
        {
            $auth = Auth::singleton($name,$session_name);
        }
        return $auth;
    }
    function &_gologin($name,$redir = null)
    {
     $_AUTH = Auth::_loadConfig();
     if(key_exists($name,$_AUTH['CONFIG']))
     {
         $action = $_AUTH['CONFIG'][$name]['login'];
         if(empty($redir)&&!empty($_AUTH['CONFIG'][$name]['door']))
         {
             $redir = $_AUTH['CONFIG'][$name]['door'];
         }
         Auth::_forward("$action?name=$name&redir=$redir");
     }
    }
    function &_loadConfig()
    {
        global $_AUTH;
        if(empty($_AUTH))
            $_AUTH['CONFIG'] = &PEAR::getStaticProperty('Auth','options');
        return $_AUTH;
    }
    function &_forward($url)
    {
        ?>
        <SCRIPT>
        window.location.replace('<?=$url?>');
        </SCRIPT>
        <?
        die;
    }
    function &login($get,$post){
        $_AUTH = Auth::_loadConfig();
        if(
            !empty($get['name'])
            &&key_exists($get['name'],$_AUTH['CONFIG'])
            )   // if ()
     {
         $name = $get['name'];
         if(!empty($get['redir']))
         {
            $redir = $get['redir'];
         }else
         {
            $redir = './';
         }
         $action = $_AUTH['CONFIG'][$name]['login'];
         if(
            !empty($post['action'])
            &&$post['action'] == 'login'
            &&!empty($post['username'])
            &&!empty($post['password'])
            )   // if ()
         {
            $username = $post['username'];
            $password = $post['password'];
            $do_class = $_AUTH['CONFIG'][$name]['DO_class'];
            $do_user = $_AUTH['CONFIG'][$name]['DO_userfield'];
            $do_pass = $_AUTH['CONFIG'][$name]['DO_passfield'];
            $do = DB_DataObject::staticGet($do_class,$do_user,$username);
            if(!empty($do)){
                //var_dump($do -> $do_pass);
                if(md5($password) == $do -> $do_pass)
                {
                    if(empty($prefix))  $prefix = AUTH_PREFIX;
                       $session_name = $prefix.$name;
                    $_SESSION[$session_name] =
Auth::singleton($name,$session_name);
                    Auth::_forward($redir);
                }else {
                    Auth::_forward("$action?name=$name&redir=$redir");
                }
            }
         }else{
             $s = new mSmarty();
                $s -> assign('auth_name',$name);
                $s -> assign('auth_redir',$redir);
                $s -> display($_AUTH['CONFIG'][$name]['login_template']);
                die;
         }
     }
    }
    function &logout($name)
    {
        if(empty($prefix))  $prefix = AUTH_PREFIX;
        $session_name = $prefix.$name;
        if(!empty($_SESSION[$session_name])) {
            $_SESSION[$session_name] = null;
            $_AUTH = Auth::_loadConfig();
            if(
                key_exists($name,$_AUTH['CONFIG'])
                &&!empty($_AUTH['CONFIG'][$name]['logout_to'])
                )   // if ()
         {
            $logout = $_AUTH['CONFIG'][$name]['logout_to'];
            Auth::_forward($logout);
         }
        }else {
            Auth::_forward('./');
        }
    }
}

?>

ini file:

[admin]
login=login.php
login_template=admin/login.htm
logout=logout.php
logout_to=t.php
DO_class = DataObjects_Config
DO_userfield = admin_user
DO_passfield = admin_pass

and the setup code:

...
require_once('Auth.php');
$Auth_options = &PEAR::getStaticProperty('Auth','options');
$config = parse_ini_file(WEBDOC_PATH.'/auth.ini',true);
$Auth_options = $config;
...



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to