Zend FW的授权

时间:2011-04-09 09:30:44

标签: zend-framework plugins authentication

我想在基于ZF的应用程序中进行授权。 在Kohana我可以做类似

的事情
public $auth;
public $user;
public function before()
{
    parent::before();

    $this->auth = Auth::instance();
    $this->user = $this->auth->get_user();
    // $this->user is object if user was logged in or FALSE if not
}

在我的抽象控制器中。

如何在Zend中制作相同的内容?我已经阅读了插件,并认为这是我需要的,但没有找到任何信息保存插件类文件,我应该在哪里启用它们?

2 个答案:

答案 0 :(得分:2)

您也可以在ZF中执行类似于您在Kohana中所做的事情。我个人从来没有使用过Kohana,但我认为ZF的你的例子版本与之类似:

// assuming IndexController
class IndexController extends Zend_Controller_Action {

    protected $_auth;
    protected $_user;

    // you could also use init() here.
    public function preDispatch() {
        $this->_auth = Zend_Auth::getInstance();
        $this->_user = $this->_auth->getIdentity(); 
    }
}

如果你想在抽象控制器中使用它,那么你可以创建一个扩展Zend_Controller_Action的(例如My_Controller_Action)。有了这个,IndexController只会扩展你的抽象控制器而不是Zend_Controller_Action。

答案 1 :(得分:0)

喂!这也很简单。但是,如果您想获得授权或处理新授权?什么,这两个都来了。首先使用数据库表中的凭据处理授权:

$db   = $this->getInvokeArg('bootstrap')->db;
$auth = Zend_Auth::getInstance();

$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('authLogin')
    ->setIdentityColumn('username')
    ->setCredentialColumn('password')
    ->setIdentity($username)
    ->setCredential($password);

$result = $auth->authenticate($authAdapter);

if ($result->isValid()) {
    // Yeah, logged in. Do some stuff here...
}

如果用户当前已登录,则会进行检查:

$auth = Zend_Auth::getInstance();

if ($auth->hasIdentity()) {
    // User is logged in. Retrieve its identity
    $username = $auth->getIdentity();
}

希望这会有所帮助......