S'il vous plaît garder avec moi, comme je suis un noob programmation/cakephp, mais je ne sais pas comment restreindre l'accès de l'utilisateur à d'autres données de l'utilisateur. Lorsqu'un utilisateur se connecte, il obtient un tableau de bord de ses annonces (qui proviennent de plusieurs modèles ... restaurants, hôtels, parcours de golf, images pour chaque annonce, informations de localisation, coupons, etc.). Selon le modèle/contrôleur, je pourrais avoir un utilisateur '3' (qui a des listes d'hôtels) tapez dans la barre de navigateur/restaurants/éditer/1 et modifier les informations de restaurant de l'utilisateur '17' qui a un restaurant avec ID = '1'. Pire, ils peuvent même accéder à/users/dashboard/17. Comment limiter un utilisateur à accéder uniquement à ses propres données? J'espérais qu'il y avait une sorte de partie 'beforeAllow()' de l'AuthComponent que je pourrais utiliser dans AppController qui vérifie l'identifiant de l'utilisateur et les renvoie vers leur tableau de bord s'ils essaient d'exécuter une action CRUD sur les données des autres utilisateurs.utilisateur connecté peut accéder aux données des autres utilisateurs
Même si j'utilisais ACL (je sais que je devrais mais c'est franchement un peu trop sur ma tête à ce stade de l'apprentissage), je devrais encore connaître le bon code pour limiter l'accès utilisateur, correct?
Ci-dessous mon AppController:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'view'),
'logoutRedirect' => array('controller' => 'docs', 'action' => 'index'),
'authError' => 'Sorry, you are not authorized to view this page.'
)
);
function beforeFilter() {
$this->Auth->userModel = 'User';
$this->Auth->allow('join_now','debug','index', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us', 'view', 'results');
}
}
et voici une fonction d'édition de l'échantillon (la fonction d'édition de mon UnitsController):
function edit($id) {
$this->set('title', 'Edit your property');
$this->Unit->id = $id;
if (empty($this->request->data)) {
$this->request->data = $this->Unit->read();
} else {
if ($this->Unit->saveAll($this->request->data)) {
$this->Session->setFlash('Your property has been updated.', 'success');
}
}
}
je vais dire que chacun de mes tables db a un champ user_id afin que l'utilisateur connecté puisse correspondre à l'id_utilisateur de chaque modèle.
Je pensais que this SO question était ce que je cherchais, mais ils ont fini par descendre sur une tangente et n'ont jamais répondu à la question initiale de l'utilisateur a demandé.
Je savais que j'allais obtenir plusieurs réponses «non, sérieusement utiliser le composant ACL», heh heh. (Insérez un autre 'le manuel du gâteau est terrible' commentaire) Honnêtement, je suis d'accord, je n'avais aucune idée de comment étrangler une action basée sur l'identifiant de l'utilisateur connecté, votre code ci-dessus est à peu près ce que je cherchais . JE VOUS REMERCIE! – huzzah