Bonjour,

Je veux sécuriser la modification et la création à partir d'un formlaire en se basant sur l'ID de l'utilisateur qui est connecté, et une autre table qui contient l'ID de sa sté, les tables des formulaires contiennent le champ ID de la sté.

Ces deux informations sont stockés en session, et du coup je veux créer une fonction dans le AppController (isAllow) , avez vous une idée SVP sur la procédure ?

Merci

6 réponses


Romain Chevallier
Réponse acceptée

tu fais un controle au chargement de ta page

avec un beforeFilter sur ton controlleur ou tu examine la table et les droit ou non de l'utilisateur

agencep
Auteur
Réponse acceptée

Bonjour,

finalement, je crois que j'ai trouver la meilleure solution à mon prob de sécurité.
J'ai créer une fonction dans mon appController

public function isAllow()
    {
        $id = (int)$this->request->params['pass'][0];
        $model = $this->modelClass;

        if ($id) {
            $d = $this->$model->field('id', array('id' => $id, 'Account_id' => $this->Session->read('Auth.Account.id')));
            if ($d !== false) {
                return true;
            } else {
                throw new NotFoundException('Une erreur s\'est produite');
            }
        }
    }

et je fais appel a cette fonction dans chaque controlleur dans beforeFilter().

en attendant de trouver quelque chose de meilleur.

Bonjour.
C'est le formulaire que vous voulez sécuriser ou l'accès à une action ou des actions selon ses informations utilisateur ?
Car pour information, il y a un callback déja existant concernant les utilisateurs connectés qui se nomme isAuthorized.

agencep
Auteur

Bonjour,

J'explique :
J'ai une table Users qui contient les login / pass => ID
J'ai une autre table Accounts qui contient les sociétés => relié par user_id à la table users
et d'autres tables qui contiennent par examples les employés des sociétés => elle sont reliés par un AccountID à la table Accounts

Je veux eviter la falsification des informations :
par example : le lien pour edition est http://*******/add/13, et si je fais http://*****/add/14 et que ce dernier n'appartient pas à la sté connecté, il doit lui répondre throw notFound**, pour l'empecher de voir le contenu qui n'est pas le sien.

Merci

agencep
Auteur

bonjour romain, d'ailleur cest ce que j'ai fais mais par contre est ce que je peux utiliser cette fonction dans mon appController pour éviter de l'ecrire dans mes 200 controlleurs ?

merci

ouais tu le met dans l'appController