Alors ba dans le auth tu peut changer l'action et le controller
Bonjour,
Me revoilà encore.
Je recherche actuellement un prochain pour que quand la personne n'est pas connecté il n'est accès qu'a la page "Maintenance".
J'ai pensé a utilisé le composant Auth->allow(); mais allow nous redirige directement vers Controller->Users avec l'action ->Login alors que je voudrais le controller ->Maintenance et l'action ->index.
Auriez vous une solution à ca ?
Merci beaucoup à vous.
59 réponses
Du genre ?
CakePHP 2.0
Merci beaucoup Greg.
Juste mais comment interdir les autres pages alors ? Je veux qu'ils est accès aux pages juste si il sont connectés sinon : La page Maintenance donc de login.
J'aurais mit ca moi:
$this->Auth->allow("maintenance");
Et as tu une idée pour rediriger quand il y a un "missing controller" je vois plein de gens parlé de AppError mais il n'existe pas ce fichier je met leur code ca ne me fais rien.
Oui mais je veux juste maintenance donc j'ai bon?
Mais après par exemple si il va sur une page qui a pas de controller, je veux qu'il soit rediriger a '/'.
Bonsoir.
J'ai une question à te poser, ton site n'est pas tout le temps en maintenance je suppose, n'est-ce pas ?
Dans ce cas là, il te faut faire une vérification pour quand c'est le cas ou non et dans ces conditions, il te suffit d'y configurer le composant Auth, de manière à ce que tu puisses avoir deux moyens différent d'autorisation pour le composant Auth.
Non mon site seras pas tout le temps en maintenance.
Mais j'enleverais le code après enfin le routing vers maintenance.
je ferais plutot un controller maintennance, et qui fait en sorte que s'ik est activé alors toutes les pages sont redirigées vers la page maintenance et s'il ne l'est pas alors aucune redirection et dans ton admin ta juste un bouton a mettre c'est plus pratique !
Oui mais comment fair ca ?
Mon idée, je propose pour pas qu'on me dise que je fous rien :
Ca fais le même résultat
Ouai et tu fais une table config
J'utilise quelle fonction en fait pour redirect ?
?
Ou tu fais un petit coup de config
Ta envie de revenir voir mon belle ordinateur ?
Je sens que j'ai fais encore une connerie, je re regarde.
J'ai édité mon code.
Warkas fait le dans les routes ça sera plus clair pour toi, si dans ton fichier bootstrap.php tu met la variable à 1 ou 2 ça changera toutes tes routes comme ça tu manipulera plus facilement les pages accessibles.
Et avec cette écriture dans la config Configure::write() / Configure::read() tu y auras accès partout car c'est une méthode statique.
Donc partout tu aura accès à la valeur que tu rentreras 1 ou 2,3 etc... après à toi de faire tes conditions: if( Configure::read('AppStatus') == 1 ){} ....
Euh normale que mon this layout fonctionne pas ?
Pose toi 5 minutes et relis bien la doc de Auth sur le book:
http://book.cakephp.org/2.0/fr/tutorials-and-examples/blog-auth-example/auth.html
Pourquoi ca ?
Mais pourquoi tu fais une fonction de loggin sur ta méthode maintenance? Tu as une méthode loggin dans ton model User pour gérer ça.
DRY: Don't Repeat Yourself ...
Explique moi ce que tu voulais faire
Alors je veux pour que sur la page de maintenance que l'equipe est accès au site pour voir les modifications.
Et je dois bien avoir un form pour me connecter..
D'accord merci beaucoup ca fonctionne bien là. C'est possible de fair aussi une table config et de recupérer ca dans le bootstrap?
Code precedent édité avec un exemple
Oui, mais qui dis appel SQL dis temps à charger. Si tu as des données qui ne changerons qu'une fois tout les 36 du mois hésite pas à faire des fichiers de configurations. Ca te permets d'être clair et de réduire les requêtes SQL. Après dans ton application rien ne t'empêche de l'écrire avec une fonction dans l'administration, comme par exemple, je sais pas, euh, l'url d'un Teamspeak pour un TSViewer par exemple.
Et si je veux gérer que les administrateur est accès quand même au site pendant une maintenance ?
Et ton code quand je met 0 je suis directement mit dans /users/login.
Ben tu as du créer un prefix dans tes routes pour ça:
Mais pour le coup avec notre deny() il faut autoriser les gens à se connecter dans l'adiministration donc faut prévoir le coup et avoir une méthode login en administration .
Ce que je t'ai donné est très sommaire depuis le début, et ne conviens pas à tout les projet c'est juste une base de réflexion.
Et ton code quand je met 0 je suis directement mit dans /users/login.
tu tombes dans le else
$this->Auth->deny()
rajoute en dessous
$this->Auth->allow('maintenance'); pour autoriser la méthode maintenance qui se trouve dans PagesController dans mon exemples
Mais je veux pas forcèment juste leur donné l'accès a l'administration mais au site en entier a l'équipe.
En gros :
Si maintenance & pas connecté { hop page de maintenance } else if { maintenance & pas connecté } juste maintenance
Dans ce cas là il faut que tu rajoutes une conditions sur le group de l'utilisateur:
Par exemple on veut que tout les utilisateurs qui ont le group_id à 1 est accès à tout
J'ai cette erreur.
le mieux reste la fonction isAuthorized() pour deny les droit d'acces en administration example:
$this->Session->read(...) et pas $this->session->read(...) dsl c'est le S minuscule qui va pas
Sauf jean si je dois fair ca sur toutes les pages.. Pour les maintenances.
Nan mais dans tes controllers tu dois extends le beforeFilter dans tout tes controller comme ça le beforeFilter de ton AppController fonctionnera sur tout les controller que tu as créé.
Avec ca ils devraient avoir accès à tout les admins non?
Je comprend pas pourquoi fair deux fois un if et un else if a coté
Tu as raison j'avais fais un copié collé de mon ancien truc faux, je suis un peu pressé j'ai pas fais attention, normalement la c'est plus logique
Et ta une idée pour que si le site en maintenance la page principal est maintenance ? routing ? car ca me redirige a users/login ?
Jc pires 2eme compte: Oui dans le dernier else la ou il y a $this->Auth->deny() rajoute $this->Auth->allow('maintenance'); pour autoriser la vue maintenance
Et pour le missing controller pour redirect ?
Ou est l erreur? C quoi exactement.
<CODE>
Missing Controller
Error: Controller could not be found.
Error: Create the class Controller below in file: app\Controller\Controller.php
<?php
class Controller extends AppController {
}
Notice: If you want to customize this error message, create app\View\Errors\missing_controller.ctp
Stack Trace
APP\webroot\index.php line 118 → Dispatcher->dispatch(CakeRequest, CakeResponse)
</CODE>
Mais je veux que tout les missings controller redirige a "/".
Une raison a ce que sa me sorte rien du tout alors que ma table est remplises ?
Je te recommande de plutôt stocker les résultats de ta requête dans une variable et de débugger la variable au lieu de débugger directement la requête.
Mais je veux que tout les missings controller redirige a "/".
Il n'y a pas de redirect sur les Missing Controller, tout ce que tu peux faire c'est créer un fichier pour en personnaliser l'affichage de l'erreur.
Si tu te retrouve avec cette page, c'est une erreur interne, et non due à l'utilisateur.
Ou est ton redirect ton erreur n est pas normal
Je veux rediriger en fait quand il y a Missing Controller
Mais ca n'as pas l'air possible.
Mais ca n'as pas l'air possible.
Ce n'est pas impossible, puisque dans la doc de CakePHP, ils disent qu'il est possible de modifier le comportement des exceptions : Créer un controller personnalisé pour gérer les exceptions.
Sauf que comme il y est dit, ce genre d'erreur est censé afficher un visuel et non par exemple, faire une redirection.
Créer un fichier dans app AppError.Php
Je trouve ou ce AppError ?
Je trouve ou ce AppError ?
Il n'y a pas de AppError et il ne te servirait à rien d'en faire un, regardes plutôt mon message précédent.
A toi de le creer
je vais regarder la DOC lartak merci.
Euuh je reviens, vraiment besoins d'un babysitter de codage moi car j'ai tellement de question et de problème :
Une raison a ce que sa me sorte rien du tout alors que ma table est remplises ?
Et ça t'affiche un debug avec un tableau vide sur ta vue ?
Ca m'affiche même pas un tableau , logiquement ca devrait me me mettre array() mais là rien.
Configure::debug est bien supérieur à 0 dans tes paramètre d'application?
Et si tu fais un var_dump($message) ?
Ca m'affiche même pas un tableau , logiquement ca devrait me me mettre array() mais là rien.
Si ton debug n'est pas 0 (voir message ci-dessus), ton debug doit bien être affiché, sauf que tu ne doit pas le voir car il doit être caché par un/des élément(s) de ton design, donc pour le voir sans problème, mets un die(); juste après le debug() :
Car même si la variable était vide, elle renverrait null.
Ou alors, tu envoies la variables $message à la vue via set et tu fais le debug de la variable sur la vue.
Oui bien vu Lartak pour le die(); c'est tellement automatique pour moi que je n'y avais pas pensé.
Non il me renvoie
Mais je voudrais préciser que si je met :
$message = $this->Post->find('all', array("limit" => 3));
Ca fonctionne d'un coup et ca m'en affiche bien 3.
Et le var dump fonctionne bien.