[php] Codeigniter: Contrôle des privilèges de connexion avec héritage



Answers

Question

Je cherche à me connecter avec mon projet de codeigniter.

Quelques considérations:

1) Deux contrôleurs externes ne nécessitent pas d'authentification. Un pour l'information (splash_pages et autres), et l'autre pour créer une session connectée.

2) Tous les autres contrôleurs héritent d'un contrôleur maître qui, dans le cadre de son constructeur, nécessite que vous soyez connecté ou qu'il vous donne accès à l'écran de connexion.

Jusqu'à présent, le 2 ci-dessus fonctionne bien pour connecté ou déconnecté.

En termes de code:

Le contrôleur maître que je décrivais pour 2) Ceci est situé dans le dossier Core de Codeigniter

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('cart');
        $this->load->library('session');
        $this->load->helper('form');
        $this->load->library('form_validation');
        if (!$this->session->userdata('loggedin')){
            redirect('/sessions/log_in/','refresh');
        }
    }

Une classe utilisant le système de connexion:

class Records extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('some_model');
        $this->load->library('some_library');
    }

L'idée est que sur la construction de l'objet, il vérifie si l'utilisateur est connecté ou non et construit l'objet correctement ou redirige vers l'écran de connexion.

Cependant, les besoins du projet ont un peu changé. Les exigences indiquent maintenant qu'il existe environ 6 groupes d'utilisateurs différents dont les privilèges peuvent être organisés en sous-ensembles. A peut faire I, B peut faire A + II, C peut faire B + III, et ainsi de suite. Il y a eu de légères indications qu'il pourrait y avoir des privilèges qui ne sont pas strictement sous-ensemble (IE seulement B peut faire la tâche IV), mais cela n'a pas encore été confirmé, donc je veux garder mes options ouvertes.

Ce que j'envisage de faire c'est d'avoir un tas de contrôleurs de MY_Controller qui héritent de MY_Controller.

Par exemple dans le dossier Core:

class MY_AsController extends MY_Controller {
    public function __construct(){
        parent::__construct();
        $accountType = $this->session->userdata('accountType');
        if(!($accountType == declaredConstant)){
            redirect('/someController/someMethod','refresh');
        }
    }

Ensuite, dans le dossier des contrôleurs:

class AControlPage extends MY_AsController {
     //Insert page functions that only As have access to here
}

Malheureusement, l'appliquer dans la pratique ne génère aucune erreur, seulement une page blanche. Je ne suis pas sûr de quoi après cela cependant.




Links