Nasıl herhangi bir sayfayı görüntülemek için oturum açmış olmanız bir kullanıcı kuvvet?

5 Cevap php

Ben şu anda Zend Framework ile ilgili oynuyorum ve ben bir Zend_Auth kullanarak kimlik doğrulama kodu yazdım. Ben onlar bir şey görmek için önce kullanıcı oturum olduğundan emin olmak için bir yol bulmaya çalışıyorum ama bir denetleyici bazında bunu yapmak istemiyorum.

Ben bir eklenti düşünüyorum, ama ben onu tüm kitaplar bu konuda oldukça çöp vardır.

5 Cevap

A plugin is a good idea. I answered to a similar question here:

How do i centralize code from my init functions in all controllers ?

Ayrıca dokümantasyon sayfasını kontrol Zend Controller Plugins

Zend_Auth::getInstance()->hasIdentity()

Siz kullanıcı, açtıysa belirlemek için kullanabilir ve daha sonra giriş sayfasına değilse yönlendirmek için yönlendirici kullanabilirsiniz.

Bununla birlikte, daha kolay bir şekilde a Redirector Zend Controller Action Helper kullanmaktır.

Zend___Acl hangi bir kullanıcının belirli kaynaklara erişimi olup olmadığını tanımlamak için kullanılır içine bak. Bir kaynak oldukça çok şey olabilir, ama bu bağlamda size kaynak olarak denetleyicileri ve eylemleri tanımlamak için ACL kullanabilirsiniz. Kullanıcı giriş her zaman rolleri bir dizi (biz bir veritabanında saklayabilirsiniz) atanır. Yönlendirme tamamlandıktan sonra eklenti size, Kontrol ve Eylem için isteği edin. Zend_Auth yoluyla kullanıcı rollerini toplamak ve ACL karşı onları kontrol edin. ACL diyorsa kullanıcı, kaynağa erişmek hiçbir şey, başka bir ileri / hata denetleyicisi yönlendirme ve hatayı yazdırmak iznine sahip.

// Pseudo-code. You need to define the ACL and roles somehow.
class AclPlugin extends Zend_Controller_Plugin {
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {

        $controller = $request->getControllerName();
        $action = $request->getActionName();
        $roles = Zend_Auth::getInstance()->getRoles();
        $acl = new MyAcl();
        if($acl->hasAccess($roles, $controller, $action)) { return; }
        // None of the user's roles gave her access to the requested 
        // controller/action, so re-write the request to the error controller
        $request->setControllerName('error')
                ->setActionName('authorizationFailed')
                ->setParam('resource', array('controller' => $controller
                                             'action' => $action));
    }
}
class MyAcl extends Zend_Acl {
    public function hasAccess($roles, $controller, $action) {
        foreach($roles as $role) {
            if($acl->isAllowed($role, $controller, $action)) {
                return true; // Simplified. Here we say if one of the user roles can
                             // access a resource, that is good enough. 
                             // Might want to do something a bit more complicated.
            }
        }
        return false;
    }
}

Nasıl Zend_Controller_Action uzanır ve sonra kontrolörleri küresel denetleyicisi genişletmek var küresel denetleyicisi kurma hakkında. Init> hasIdentity () () veya preDispatch - Sonra küresel denetleyici Zend_Auth :: getInstance () koyar?

I (ZF acemi) son zamanlarda aynı konuyu durulması, ve (belki de "baypas" kontrolörleri / eylemlerin listesi ile) bootstrap olarak kimlik doğrulama kontrolleri yapmayı düşündüm.