Mysql
 sql >> база данни >  >> RDS >> Mysql

Каква е най-добрата практика за ограничаване на конкретни страници до влезли потребители само в Codeigniter?

Ударили сте нокътя в главата, но има малко по-ефективен начин да го направите.

Разширете базовите контролери по един начин (вярвам, че първоначално е описано от Фил Стърджън), но ще обобщя тук:

Вижте тази статия за много задълбочено писане.

но по същество:

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

така че сега, ако искате да ограничите достъпа, просто:

class Secret_page extends MY_Controller {

 // your logged in specific controller code
}

и разширеният контролер автоматично ще провери дали потребителят е влязъл в конструктора.

що се отнася до това как, вероятно бих задал user_id като стойност, за да проверя дали е зададен, или може би потребителска "група" - тогава можете да получите потребителски разрешения и различни нива на достъп във вашата система.

надявам се това да помогне малко.

редактиране

Добавете това към 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 );
    }
}

Тъй като използвате CI 2.0, ще трябва да поставите MY_Controllers в Application/CORE, а не в библиотеки.

Моето приложение/ядро изглежда малко като:

Admin_Controller.php
MY_Controller.php
Public_Controller.php


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпратете текущите GPS координати към mySQL базата данни с помощта на API на google maps

  2. вземете всички елементи от категорията и нейното дете

  3. $stmt->close() срещу $stmt->free_result()

  4. Не може да се получи броят на редовете и да се извлече, когато се използва MySQLi подготвен оператор

  5. RuntimeError:работи извън контекста на приложението