You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 07-creating-posts.md.erb
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,9 @@
1
1
---
2
-
title: Posts erstellen
2
+
title: Beiträge erstellen
3
3
slug: creating-posts
4
4
date: 0007/01/01
5
5
number: 7
6
-
contents: Lerne wie man POST Daten client-seitig versendet.|Implementiere einen Sicherheitscheck.|Begrenze den Zugriff zum Formular.|Lerne wie man eine serverseitige Methode für zusätzliche Sicherheit nutzt
6
+
contents: Lerne wie man Beitragsdaten client-seitig versendet.|Implementiere einen Sicherheitscheck.|Begrenze den Zugriff zum Formular.|Lerne wie man eine serverseitige Methode für zusätzliche Sicherheit nutzt.
Copy file name to clipboardExpand all lines: 08-editing-posts.md.erb
+20-20Lines changed: 20 additions & 20 deletions
Original file line number
Diff line number
Diff line change
@@ -1,15 +1,15 @@
1
1
---
2
-
title: Editing Posts
2
+
title: Beiträge verändern
3
3
slug: editing-posts
4
4
date: 0008/01/01
5
5
number: 8
6
-
contents: Add a form for editing your posts.|Set up edit permissions.|Restrict which properties can be edited.
6
+
contents: Erstelle ein Formular für das Ändern eines Beitrags.|Richte Zugriffsberechtigungen ein.|Schränke ein, welche Felder geändert werden dürfen.
7
7
paragraphs: 29
8
8
---
9
9
10
-
Nun, da wir Beiträge anlegen können ist der nächste Schritt, sie zu ändern und löschen. Weil der Code für die entsprechende UI einfach sein wird, nutzen wir die Gelegenheit um darüber zu sprechen wie Meteor mit Benutzerberechtigungen umgeht.
10
+
Nun können wir Beiträge anlegen. Der nächste Schritt ist, sie zu ändern und zu löschen. Der Code für die UI ist relativ einfach. Deshalb nutzen wir die Gelegenheit, um in diesem Kapitel darüber zu sprechen, wie Meteor mit Benutzerberechtigungen umgeht.
11
11
12
-
Zuerst verbinden wir unseren Router. Wir fügen eine Route für die Editierung des Beitrags ein und setzen den Kontext der Seite.
12
+
Wir fangen damit an, unseren Router zu verbinden. Wir fügen eine Route für das Ändern von Beitragen ein und setzen den Kontext der Seite.
13
13
14
14
~~~js
15
15
Router.configure({
@@ -87,7 +87,7 @@ Jetzt können wir uns das Template dazu anschauen. Das Template `postEdit` ist e
87
87
~~~
88
88
<%=caption"client/views/posts/post_edit.html"%>
89
89
90
-
Und hier ist der Manager `post_edit.js`, der dazu gehört:
90
+
Und hier ist der dazu gehörige Manager `post_edit.js`:
91
91
92
92
~~~js
93
93
Template.postEdit.events({
@@ -124,19 +124,19 @@ Template.postEdit.events({
124
124
~~~
125
125
<%=caption"client/views/posts/post_edit.js"%>
126
126
127
-
Mittlerweile sollte der meiste Code dir vertraut erscheinen. Zuerst haben wir da den Template-Helper, der den derzeitigen Beitrag holt und ihn an das Template weiterleitet.
127
+
Mittlerweile sollte der meiste Code davon dir vertraut erscheinen. Zuerst haben wir da den Template-Helper im Router, der den derzeitigen Beitrag holt und ihn an das Template weiterleitet.
128
128
129
129
Dann gibt es zwei Event-Callbacks in dem Template: Eines für das Event `submit` und eines für das Event `click` des Links zum Löschen des Beitrages.
130
130
131
-
Der Callback zum Löschen ist sehr einfach: Das Default-Event wird verhindert. Dann wird eine Bestätigung angefordert. Wenn wir diese erhalten, wird die derzeitige Id aus dem Datenkontext des Template genommen und anhand dieser gelöscht. Am Ende wird der Benutzer zur Homepage geleitet.
131
+
Der Callback zum Löschen ist sehr einfach aufgebaut: Das Default-Event wird verhindert. Dann wird eine Bestätigung angefordert. Wenn wir diese erhalten, wird die derzeitige ID aus dem Datenkontext des Template genommen und anhand dieser gelöscht. Am Ende wird der Benutzer zur Homepage geleitet.
132
132
133
-
Der Callback zum Aktualisieren ist ein wenig länger, aber nicht wesentlich komplizierter. Nach dem Abschalten des Default-Events und dem Ermitteln der ID des Beitrags, entnehmen wir die Werte der neuen Felder aus der Seite und speichern diese in dem Objekt `postProperties`.
133
+
Der Callback zum Aktualisieren ist ein wenig länger, aber nicht wesentlich komplizierter: Nach dem Abschalten des Default-Events und dem Ermitteln der ID des Beitrags, entnehmen wir die Werte der neuen Felder aus dem Zielobjekt des Events und speichern diese in dem Objekt `postProperties`.
134
134
135
-
Dieses Objekt übergeben wir dass an die Meteor-Methode `Collection.update()`. Mit dem Callback wird ein Fehler angezeigt, wenn die Operation fehlgeschlagen ist. Falls die Operation erfolgreich war, leitet der Callback den Benutzer zurück auf die Seite des Beitrags zurück.
135
+
Dieses Objekt übergeben wir dass an die Meteor-Methode `Collection.update()`. Der Callback zeigt einen Fehler an, wenn die Operation fehlgeschlagen ist. Falls die Operation erfolgreich war, leitet der Callback den Benutzer auf die Seite des Beitrags zurück.
136
136
137
137
### Hinzufügen von Links
138
138
139
-
Wir sollten auch Links auf unsere Beträge anlegen. Damit haben unsere Möglichkeit die Seite für das Ändern von Beiträgen zu erreichen.
139
+
Es fehlen noch Links auf unsere Beträge. Mit diesen erste haben unsere Benutzer die Möglichkeit die Seite für das Ändern von Beiträgen zu erreichen.
140
140
141
141
~~~html
142
142
<templatename="postItem">
@@ -182,7 +182,7 @@ Unser Änderungsformular für Beiträge sieht gut aus. Aber du kannst derzeit no
182
182
183
183
Da wir im letztem Kapitel das Package `insecure` entfernt haben, werden alle client-seitigen Änderungen derzeit abgewiesen.
184
184
185
-
Um das wieder gerade zu biegen, werden wir ein paar Berechtigungsregeln anlegen. Als erstes erzeuge die neue Datei `permissions.js` im Verzeichnis `lib`. Diese soll unsere Berechtigungslogik enthalten und wird immer zuerst geladen (und ist sowohl in Server- als auch in Client-Umgebung verfügbar).
185
+
Um das wieder gerade zu biegen, werden wir Berechtigungsregeln anlegen. Als erstes erzeuge die neue Datei `permissions.js` im Verzeichnis `lib`. Diese soll unsere Berechtigungslogik enthalten und wird immer zuerst geladen. Sie ist sowohl in Server- als auch in Client-Umgebung verfügbar.
186
186
187
187
~~~js
188
188
// check that the userId specified owns the documents
Im Kapitel [Creating Posts](/chapter/creating-posts), whaben wir die Methode `allow()` entfernt, weil wir neue Posts nur noch per ServerMethode angelegt haben (diese umgeht sowieso`allow()`).
195
+
Im Kapitel [Beiträge anlegen](/chapter/creating-posts), haben wir die Methode `allow()` entfernt. Dies war möglich, weil wir neue Posts nur noch per Server-Methode angelegt haben (dieses Vorgehen umgeht sowieso den Mechanismus von `allow()`).
196
196
197
-
Aber jetzt, wo wir Beiträge im Client ändern und löschen, schauen wir uns noch mal die Datei `posts.js` an und fügen den folgenden Block `allow()` hinzu:
197
+
Aber jetzt, wo wir Beiträge im Client ändern und löschen, schauen wir uns noch mal die Datei `posts.js` an. Wir fügen den folgenden Block `allow()` wieder hinzu:
198
198
199
199
~~~js
200
200
Posts = new Meteor.Collection('posts');
@@ -216,7 +216,7 @@ Meteor.methods({
216
216
217
217
Nur weil du deine Beiträge ändern darfst soll das nicht heissen, dass dies für jede Eigenschaft des Beitrags gilt. Zum Beispiel wollen wir nicht, dass Benutzer das Erstellungs-Datum eines Beitrags ändern können und ihn dann jemand anders zuweisen können.
218
218
219
-
Wir Benutzer hierfür Meteors Callbakc `deny()` um sicherzustellen, dass Benutzer nur angegebene Felder ändern können:
219
+
Wir benutzen hierfür Meteors Callback `deny()` um sicherzustellen, dass Benutzer nur angegebene Felder ändern können:
220
220
221
221
~~~js
222
222
Posts = new Meteor.Collection('posts');
@@ -238,7 +238,7 @@ Posts.deny({
238
238
239
239
<%=commit"8-3","Only allow changing certain fields of posts."%>
240
240
241
-
Wir erhalten das Array `fieldNames`, dass eine Liste der Felder enthält, die geändert werden. Durch die Verwendung von [Underscore](http://underscorejs.org/)s Methode `without()` liefern wir eine Teilmenge des Arrays zurück in der Felder, die nicht `url` oder `title` heissen, fehlen
241
+
Wir erhalten das Array `fieldNames`, dass eine Liste der Felder enthält, die geändert werden. Durch die Verwendung von [Underscore](http://underscorejs.org/)s Methode `without()` liefern wir eine Teilmenge des Arrays zurück. In dieser fehlen die Felder, die nicht `url` oder `title` heissen.
242
242
243
243
Im Normalfall sollte das Array leer sein und eine Länge von 0 haben. Wenn jemand etwas komisches probiert, wird die Array-Länge grösser gleich 1 sein. Dadurch liefert der Callback den Wert `true` zurück (und verhindert dadurch die Änderung).
244
244
@@ -250,16 +250,16 @@ Um Beiträge zu erzeugen, benutzen wir die Server-Methode `post`. Aber zum Ände
250
250
251
251
Wann ist es sinnvoll das eine oder das andere zu verwenden?
252
252
253
-
Wenn der Sachverhalt einfach ist, kannst du die Regeln mit `allow` und `deny` festlegen. Auch ist es meistens einfacher, die Dinge auf dem Client zu regeln.
253
+
Wenn der Sachverhalt einfach ist, kannst du die Regeln mit `allow` und `deny` festlegen. Es ist meistens weniger aufwendig, diese Dinge auf dem Client zu regeln.
254
254
255
-
Das Manipulieren der Daten vom Client aus erzeugt den Anschein von Direktheit und kann zu einem besseren Benutzererlebnis beitragen, solange du daran denkst Fehler elegant zu behandeln (zum Beispiel, wenn der Server sich asynchron zurückmeldet und mitteilt, dass die Änderung doch nicht stattgefunden hat)
255
+
Das Manipulieren der Daten vom Client aus erzeugt den Anschein von Direktheit und kann zu einem besseren Benutzererlebnis beitragen - Solange du daran denkst Fehler elegant zu behandeln (zum Beispiel, wenn der Server sich asynchron zurückmeldet und mitteilt, dass die Änderung doch nicht stattgefunden hat)
256
256
257
-
Sobald du aber damit anfängst, Dinge zu tun, die ausserhalb des Einflussraums der Benutzer liegen soll (zum Beispiel die Vergabe von Zeitstempeln oder die Zuordnung eines Benutzers), ist es wahrscheinlich besser eine Server-Methode zu verwenden.
257
+
Sobald du aber damit anfängst, auf dem Client Dinge zu tun auf die Benutzer keinen Zugriff haben sollen (zum Beispiel die Vergabe von Zeitstempeln oder die Zuordnung eines Benutzers), ist es wahrscheinlich besser eine Server-Methode zu verwenden.
258
258
259
-
Server-Methoden sind in folgenden Szenarien ebenfalls angebracht:
259
+
Server-Methoden sind in folgenden Szenarien angebracht:
260
260
261
261
- Wenn Du Rückgabewerte schnell benötigst und nicht darauf warten kannst, dass diese über den Reaktivitätsmechanismus synchronisiert werden.
262
-
- Für Datenbankoperation, bei denen einen große Menge von Elementen geändert werden. Hierfür müssten komplette Collections hin und her übertragen werden müssen.
262
+
- Für Datenbankoperationen, bei denen einen große Menge von Elementen geändert wird. Hierfür müssen komplette Collections hin und her übertragen werden.
263
263
- Um Daten zusammenzufassen oder zu aggregieren (z.B. Anzahl der Elemente, Mittelwerte oder Summen)
0 commit comments