工厂设计模式完成登录权限验证 PHP

一个基类User,三个子类GuestUser、CustomerUser、AdminUser,子类将获取父类获取信息的方法(例如:访问Web的权限)子类中可以更新权限,这样设计比较规范,需求增加时可增加附加的用户类型,具体代码如下:

<?php
abstract class User{
    protected $name = null;
    function __construct($name)
    {
        $this->name = $name;
    }
    function getName(){
        return $this->name;
    }

    // 权限方法
    function hasReadpermission(){
        return true;
    }

    function hasModifypermission(){
        return false;
    }

    function hasDelpermission(){
        return false;
    }

    // 定制的方法
    function wantsFlashInterface(){
        return true;
    }
}

class GuestUser extends User{
}

class CustomerUser extends User{
    function hasModifypermission()
    {
        return true;
    }
}

class AdminUser extends User{
    function hasModifypermission()
    {
        return true;
    }
    function hasDelpermission()
    {
        return true;
    }
    function wantsFlashInterface()
    {
        return false;
    }
}

class UserFactory{
    private static $user = ["earnest"=>'admin','neil'=>'guest','ivan'=>"customer"];
    static function create($name){
        if(!isset(self::$user[$name])){
            echo $name.'账号不正确!';die;
        }
        switch (self::$user[$name]){
            case 'admin':return new AdminUser($name);break;
            case 'guest':return new GuestUser($name);break;
            case 'customer':return new CustomerUser($name);break;
        }
    }
}

function displayPermission(User $obj){
    echo $obj->getName().'\'s permission is:<br/>';
    echo '&nbsp;&nbsp;read:'.($obj->hasReadpermission()?'Yes':'No').'<br/>';
    echo '&nbsp;&nbsp;del:'.($obj->hasDelpermission() ?'Yes':'No').'<br/>';
    echo '&nbsp;&nbsp;modify:'.($obj->hasModifypermission()?'Yes':'No').'<br/>';
}

function displayRequirements(User $obj){
    if($obj->wantsFlashInterface()){
        echo '&nbsp;&nbsp;'.$obj->getName().'wants flash interface'.'<br/>';
    }
}

$logins = array("earnest","neil","ivan",'davis');
foreach ($logins as $login) {
    displayPermission(UserFactory::create($login));
    displayRequirements(UserFactory::create($login));
}

猜你喜欢

转载自blog.csdn.net/qq_24973351/article/details/109400848