sql >> Databasteknik >  >> RDS >> Mysql

Vad är bästa praxis för att begränsa specifika sidor till inloggade användare endast i Codeigniter?

Du har slagit huvudet på spiken, men det finns ett lite mer effektivt sätt att göra det på.

Utöka baskontrollerna, på ett sätt (tror jag ursprungligen beskrivits av Phil Sturgeon) men jag ska sammanfatta här:

Se denna artikel för en mycket djupgående skrivning.

men i huvudsak:

<?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!
        }
    }
}

så nu om du vill begränsa åtkomsten, helt enkelt:

class Secret_page extends MY_Controller {

 // your logged in specific controller code
}

och den utökade styrenheten kontrollerar automatiskt om användaren är inloggad i konstruktorn.

När det gäller hur, skulle jag förmodligen ställa in user_id som värdet för att kontrollera om det är inställt, eller kanske en "användargrupp" - då kan du få användarbehörigheter och olika åtkomstnivåer i ditt system.

hoppas detta hjälper lite.

redigera

Lägg till detta i application/config.php

/*
| -------------------------------------------------------------------
|  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 );
    }
}

Eftersom du använder CI 2.0 måste du placera MY_Controllers i Application/CORE snarare än i biblioteken.

Min applikation/kärna ser lite ut som:

Admin_Controller.php
MY_Controller.php
Public_Controller.php


  1. ta bort rader från flera tabeller

  2. MySQL - Kan inte skapa vy med SET-variabel inuti

  3. Hur använder jag CONCAT-funktionen i SQL Server 2008 R2?

  4. Välj mySQL baserat endast på månad och år