Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist die Best Practice, um bestimmte Seiten nur auf angemeldete Benutzer in Codeigniter zu beschränken?

Sie haben den Nagel auf den Kopf getroffen, aber es gibt einen etwas effizienteren Weg, dies zu tun.

Erweitern Sie die Basiscontroller auf eine Weise (ich glaube, ursprünglich von Phil Sturgeon skizziert), aber ich fasse hier zusammen:

Siehe diesen Artikel für eine sehr ausführliche Beschreibung.

aber im Wesentlichen:

<?php
class MY_Controller extends Controller
{
    function __construct()
    {
        parent::Controller();
        if (! $this->session->userdata('first_name'))
        {
            redirect('login'); // the user is not logged in, redirect them!
        }
    }
}

Wenn Sie also den Zugriff einschränken möchten, gehen Sie einfach wie folgt vor:

class Secret_page extends MY_Controller {

 // your logged in specific controller code
}

und der erweiterte Controller prüft automatisch, ob der Benutzer im Konstruktor angemeldet ist.

Was das Wie betrifft, würde ich wahrscheinlich die user_id als Wert setzen, um zu überprüfen, ob sie gesetzt ist, oder vielleicht eine Benutzer-"Gruppe" - dann können Sie Benutzerberechtigungen und unterschiedliche Zugriffsebenen in Ihrem System erhalten.

hoffe das hilft ein wenig.

bearbeiten

Fügen Sie dies zu application/config.php hinzu

/*
| -------------------------------------------------------------------
|  Native Auto-load
| -------------------------------------------------------------------
| 
| Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . EXT );
    }
}

Da Sie CI 2.0 verwenden, müssen Sie die MY_Controllers in Application/CORE statt in Libraries platzieren.

Meine Anwendung/mein Kern sieht ungefähr so ​​aus:

Admin_Controller.php
MY_Controller.php
Public_Controller.php