Bienvenue dans cette leçon, nous allons voir du nouveau matériel amusant.
Nous allons combiner notre modèle d'utilisateur l'authentification que nous avons couverte avec les terrains de camping pour s'assurer qu'un utilisateur ne peut pas supprimer le terrain de camping qu'il n'a pas créé ou qu'un utilisateur ne peut pas éditer un terrain de camping qu'il ou elle N'a pas créé.
Et c'est quelque chose qu'on appelle autorisation.
Donc, l'authentification et l'autorisation, il ya une authentification différente se réfère à savoir si quelqu'un est qui ils disent qu'ils sont.
L'autorisation est une fois que vous savez qui est quelqu'un.
Vous voyez ce qu'ils sont autorisés à faire.
Alors pensez-y comme des permissions.
Qu'est-ce que quelqu'un peut faire ce que quelqu'un est autorisé à faire avec son autorisation de sécurité dans notre application.
Donc, si vous ne possédez pas un terrain de camping si vous n'avez pas le même I.D. Comme l'auteur des terrains de camping que vous ne serez pas en mesure de mettre à jour ou de supprimer.
Commençons donc simple et travaillons avec lui de sorte que vous ne pouvez pas vous donner la forme d'édition à moins que vous possédiez le terrain de camping.
Alors allons à nos routes de camping ici.
Et ce que nous voulons faire est si vous essayez et allez à la route de terrain de camping ou mettez à jour et finalement effacez aussi tous les trois d'entre eux nous devons avoir la même logique où nous vérifions juste.
Est-ce que l'utilisateur actuel ID. Correspondre à l'ID de l'auteur pour ce terrain de camping.
Donc, souvenez-vous que c'est ce que ressemble notre structure de données où nous tirer le modèle de terrain de camping.
Nous avons l'auteur pour chaque terrain de camping et il ya un I.D. Ça va être un I.D. Pour un utilisateur il référence l'objet d'un utilisateur particulier I.D. Et alors nous avons un utilisateur bien sûr qui a un objet I.D. Il n'est pas spécifié ici, mais chaque utilisateur a un I.D. Et nous allons comparer les utilisateurs actuellement connectés I.D. À l'ID de terrain de camping autorisé afin que nous puissions faire assez facilement si nous montons dans notre à elle.
Nous allons commencer par là.
Et la première chose que nous voulons faire est de vérifier est quelqu'un qui est utilisateur connecté à tous.
Et puis, sinon, nous redirigerons l'été.
Si un utilisateur est connecté, l'utilisateur possède le terrain de camping.
Et si oui, nous allons laisser l'utilisateur exécuter ce code trouver mon ID et supprimer tout.
Sinon, nous redirigerons également.
Donc, nous allons remplir ce pour commencer à voir si quelqu'un est connecté.
Nous pouvons simplement écrire si demandé est authentifié.
Nous pourrions également utiliser le milieu où nous avons déjà défini ici est connecté.
Je vais vous montrer dans un instant pourquoi nous ne ferons pas cela.
La réponse courte est que nous définissons notre propre middleware et juste un peu.
Nous allons donc combiner cette fonctionnalité à la place de ce middleware.
Donc, si une demande est authentifiée si c'est le cas, alors nous sommes prêts à y aller.
Si ce n'est pas le cas, nous allons faire un journal constant pour commencer.
Vous devez être connecté pour faire cela et ensuite nous allons faire une réponse.
Et faisons juste un envoyer pour commencer la réponse envoyez et nous l'enverrons ceci effectivement.
Donc, si nous voyons que nous saurons que nous ne sommes pas connectés et que la première chose fonctionnera.
Alors copions ce code à l'intérieur de l'instruction if et indenté correctement.
D'ACCORD.
Nous devons donc vous connecter.
Ce qui n'est pas nouveau, nous avons déjà écrit le code pour ce faire.
Donc, vous pourriez penser où je vais à ce sujet d'une manière bizarre que nous sommes en quelque sorte.
Mais vous verrez dans un instant pourquoi.
Testez-le cependant.
Sauvegarder le serveur.
Et quand je démarre, je ne suis pas connecté.
Personne n'est connecté.
Donc, si j'essaie d'aller à slash à elle il me dit que vous devez être connecté pour le faire.
Donc, notre première partie fonctionne très bien.
Ensuite, une fois que nous serons enfermés, nous allons avoir une autre déclaration ici qui est où elle va vérifier.
L'utilisateur possède-t-il le terrain de camping?
Et la façon dont nous allons faire cela est assez simple.
La première chose que nous devons faire est de trouver le terrain de camping que nous avons déjà fait ici.
Et puis une fois que nous le trouvons, nous devons vérifier si l'ID de l'auteur sur ce terrain de camping correspond à l'utilisateur actuel qui est la demande de cet utilisateur.
Alors nous sommes prêts à partir.
Ainsi à l'intérieur d'ici est où nous faisons réellement le fait l'utilisateur sur le terrain de camping.
Nous allons garder le premier bit pour vérifier s'il y a une erreur s'il n'y a pas d'erreur alors nous allons vérifier.
Est-ce qu'un utilisateur sur le terrain de camping parce que cela signifie trouvé terrain de camping existe et puis nous aurons une instruction si et B si campground dot ID d'auteur comme vous pourriez penser que nous pourrions faire ceci.
Equals est égal à égal.
Demandez à cet utilisateur l'ID de soulignement point.
Permettez-moi juste de vous montrer ce que je veux dire, nous allons faire un journal de contact journal camp pensée id et puis ci-dessous, il va annuler cette demande de journal que l'utilisateur ne underscore ID.
Donc, un commentaire sur la déclaration if.
Nous verrons donc ces deux lignes.
Je devrai être connecté, bien sûr, si je viens d'essayer de rafraîchir en ce moment sans être connecté, nous avons une erreur.
Mais si je me connecte maintenant a la tête de pomme de terre se connecter et puis je retourne à la barre de mine de granit à elle.
Nous avons un problème.
On dirait que nous allons voir.
Eh bien, c'était stupide et essayer d'annuler comme le camping au camping Arthur n'existe pas.
Il a trouvé un terrain de camping.
Alors je vais essayer de redémarrer le serveur.
Première fois que nous sommes frais.
Vous savez nous dire que vous devez être connecté encore.
Encore une fois, nous entrons dans la tête de pomme de terre.
Mot de passe.
D'ACCORD.
Maintenant, si j'essaie de le faire, jetez un oeil à ce que nous voyons ici.
La première chose que nous imprimons ressemble à ceci.
Donc, c'est trouvé terrain de camping Arthur ID et puis nous avons des demandes que les données utilisateur I.D. Et ils semblent être identiques.
Et quand ils sont imprimés, ils sont identiques.
Mais derrière les scènes sont en fait pas les mêmes, donc les demandes que l'ID utilisateur de son ID de soulignement est une chaîne trouvée terrain de camping author point ID est un objet, c'est un objet mangouste.
Et ce n'est qu'une question délicate.
Je l'oublie de temps en temps, c'est vraiment frustrant parce qu'ils ressemblent à la même lorsque vous essayez de déboguer, mais la vérité est la première n'est pas en fait une chaîne, c'est un objet mangouste.
Celle que nous avons imprimée.
Nous voyons une chaîne, mais c'est juste la version à deux cordes.
Dans les coulisses, ce n'est pas une ficelle.
Et c'est une chaîne.
Donc, quand on les compare, ça ne marchera pas.
Donc, plutôt que de les comparer avec triple égal ou double égale ce que nous pouvons faire à la place est d'utiliser une méthode que la mangouste nous donne à cette fin.
Donc, ce que nous faisons est d'écrire une déclaration IF mis plutôt que de vérifier les terrains de camping.
L'auteur Dodd ID triple est égal à la requête à User ID.
Nous utilisons des points égaux.
Voilà.
Et maintenant, notre déclaration IF devrait fonctionner, sauf pour le fait que cela doit être trouvé camping de nouveau ce qui revient à la base de données que nous trouvons en utilisant cet ID.
Nous trouvons donc que, avec l'ID basée sur l'itinéraire, nous vérifions si l'ID d'auteur sur ce terrain de camping particulier trouvé correspond à l'ID d'utilisateur actuellement connecté.
Si c'est le cas, nous ferons une chose.
Sinon, nous ferons autre chose.
Donc, si c'est le cas, nous allons faire ceci ici rendre la page camping de la page du camping d'éditer avec terrain de camping trouvé.
Sinon, nous allons faire un repos envoyer.
Vous n'avez pas la permission de le faire, bien sûr, va changer cela éventuellement ou il ne sera pas seulement un point rouge cent, mais nous aurons un message réel qui affiche.
Alors essayons d'aller à notre application allez à une page d'affichage première chose si j'essaie de l'éditer maintenant, je dois être connecté.
Maintenant, si je me connecte ou je m'inscris comme quelqu'un d'autre que la tête de pomme de terre, il fera tomate tête et j'essaie de modifier que vous verrez avec espoir.
Là-bas, je vous ai obtenu n'avez pas la permission de le faire.
Maintenant, si nous revenons en arrière et déconnectez-vous et signez de nouveau en tant que tête de pomme de terre et essayer tout à nouveau, j'essaie de modifier.
J'ai la permission.
Et je finis ici.
Donc ça marche.
Qui est genial.
Maintenant, ce que nous allons faire est réellement refactoriser cela dans une fonction distincte.
La plupart de cette logique l'appellera quelque chose comme.
Vérifiez le terrain de camping de l'utilisateur ou assurez-vous que l'utilisateur du terrain de camping a quelque chose où nous vérifions que l'utilisateur actuellement connecté utilise ce camping particulier.
Et la raison pour laquelle nous allons passer que dans le middleware est que nous allons l'utiliser sur éditer.
Nous voulons également l'utiliser lors de la mise à jour.
Nous ne voulons pas que quelqu'un puisse envoyer une demande s'ils ne sont pas connectés.
Donc, même si encore une fois en utilisant le navigateur.
La seule façon de faire visuellement obtenir la mise à jour pour envoyer des données est d'utiliser ce formulaire.
Vous pouvez utiliser le facteur que vous pouvez envoyer une demande de facteur et ne pas être authentifié.
Nous voulons donc la même logique ici et nous voulons faire la même chose pour la suppression.
Nous ne voulons donc pas que vous puissiez supprimer quelque chose d'un terrain de camping si vous n'êtes pas connecté.
Et si vous ne le possédez pas.
Donc ce que nous allons faire est d'écrire un middleware, nous allons copier ce code pour l'instant.
Je vais le laisser là, mais nous allons descendre pour l'instant juste avec nos autres middleware.
Eh bien le dernier appelé vérifier terrain de camping propriété juste comme ça.
Et puis nous allons coller ce code et nous allons avoir un peu de travail à faire ici.
Mais l'objectif final est que sur notre édition nous devrions être en mesure d'ajouter notre middleware ici vérifier la propriété de camping.
Nous devrions être en mesure de le faire mise à jour.
Et aussi sur la suppression, mais nous allons commencer par elle et ce que nous voulons faire est de vérifier.
D'abord, vous devez ajouter dans la réponse de la demande et rappelez-vous ensuite que le middleware est mis en place demande réponse prochaine.
Donc, si l'utilisateur est actuellement connecté.
Continuez de bouger si vous n'êtes pas connecté au lieu de faire un repos nous envoyer.
Pour l'instant nous allons faire une redirection de restaurant et nous n'avons pas encore vu cela.
Nous pouvons redstart redirection retour et qui prendra l'utilisateur de retour à l'endroit où ils sont venus de la plupart.
La page précédente sur laquelle ils étaient et très bientôt vont vous montrer comment nous pouvons envoyer un message.
Eh bien, le message que nous voulons envoyer est quelque chose comme Vous n'êtes pas connecté ou vous devez être autorisé à le faire, mais nous le quittons comme ça pour l'instant.
Ensuite, s'ils sont connectés, nous allons trouver le terrain de camping.
S'il ya une erreur, nous redirigerons également vers l'arrière.
Encore une fois cette erreur se produirait si le terrain de camping ne pouvait pas être trouvé pour une raison quelconque ou si la base de données n'est pas connecté ou est quelque chose de bizarre généralement que nous ne verrions pas autrement si le camping correspond à l'ID utilisateur demandes.
Donc, si l'utilisateur qui est comme dans possède ce alors plutôt que de rendre les terrains de camping modifier parce que nous ne voulons pas toujours ce middleware pour rendre éditer ce que nous voulons qu'il fasse est de passer au reste du code en supprimer ou passer au code Une mise à jour ou une modification.
Donc, c'est ce que nous faisons ensuite.
Sinon, s'ils ne le possèdent pas, nous ferons un redirection rez.
Génial.
Alors essayons ceci, sauvez-le et nous allons faire une mise à jour de notre route d'édition ici.
Nous pouvons réduire ce pourcentage beaucoup, donc nous n'avons pas besoin de faire tout cela vraiment sauf pour nous voulons trouver le terrain de camping et tout ce que nous allons faire est si nous trouvons un terrain de camping, nous n'avons pas besoin de vérifier si elle Matchs plus parce que nous faisons cela au milieu où tout ce que nous voulons faire est de trouver un terrain de camping peut se débarrasser de tout cela.
Presque tous les formats Office ce correctement ainsi sortira un peu.
Voilà.
Donc, parce que nous avons ajouté le taux de propriété de camp de Scheck ici tout ce que nous faisons maintenant est si nous arrivons à ce point, cela signifie que nous avons déjà vérifié la propriété du terrain de camping et que nous avons réussi.
Sinon, s'il ya un problème, nous aurions redirigé que voir avec l'erreur que je reçois est nous avons une petite erreur de syntaxe ici qui est je suis en quelque sorte supprimé ma déclaration de fonction ici et vous pouvez voir qu'il se plaint que nous ne gère pas l'erreur qui Nous pourrions gérer.
Mais la chose est si nous arrivons à ce point, il ne devrait pas y avoir d'erreur de trouver PI ID parce que nous l'avons fait ici.
Et si cela fonctionne ici, nous devrions être bien d'y aller quand même.
Alors essayons-le, mais voyez si nous avons des problèmes.
Fondamentalement, nous avons simplement déplacé notre code dans une fonction distincte.
Et n'oubliez pas qu'un middleware est appelé Avant d'arriver au bon gestionnaire.
D'ACCORD.
Donc, nous allons lui donner un coup de feu.
Première chose, revenons en arrière et disons essayer et cliquez sur modifier.
Je ne suis pas connecté.