Open Source im professionellen Einsatz
Linux-Magazin 03/2014
409

Zugriffskontrolle

Der Prototyp aus den Listings 5 bis 7 ermöglicht das Auflisten, Speichern und Löschen von Beiträgen, jedoch ohne jede Zugriffskontrolle. Bislang kann jeder Client alle Beiträge bearbeiten. Listing 8 bereitet die Beispielanwendung auf eine Zugriffskontrolle vor, indem es Meteor-Pakete entfernt und andere hinzufügt. Zeile 1 zwingt die Beispielanwendung dazu, nach der Deinstallation des Pakets »insecure« die Erlaubnis zum Speichern und Löschen von Datenbankinhalten explizit zu vergeben. Zeile 2 bewirkt, dass nach dem Entfernen des Pakets »autopublish« Datensammlungen zum Lesen explizit freigegeben werden. Die Zeilen 3 und 4 installieren mit den Paketen »accounts-password« und »accounts-ui« eine Benutzerverwaltung. Abbildung 7 zeigt die Anmeldung an der Anwendung.

Listing 8

Vorbereiten der Zugriffskontrolle

01 meteor remove insecure
02 meteor remove autopublish
03 meteor add accounts-password
04 meteor add accounts-ui
Abbildung 7: Anmeldung an der Beispielanwendung.

Lesen erlaubt

Listing 9 erlaubt es durch Aufrufen der Methode »publish()« (Zeilen 1 bis 3) auf dem Webserver dem Browser, alle Objekte aus der Datensammlung »Articles« zu lesen. Mit dem Ausdruck »return Articles.find({public:True})« könnte Zeile 2 auch nur eine Teilmenge der Objekte mit der Eigenschaft »Public=True« zugänglich machen. Der Code wird in der Datei »server.js« im gleichnamigen Verzeichnis gespeichert.

Listing 9

server/server.js

01 Meteor.publish("articles", function() {
02   return Articles.find();
03 });

Umgekehrt erlaubt der Ausdruck »Meteor.subscribe("articles");« dem Browser, die in Listing 9 veröffentlichen Daten zu lesen. Diese Zeilen fügt der Programmierer in die Datei »client/client.js« ein. Der Javascript-Code aus Listing 10 speichert und löscht Objekte der Datensammlung »Articles« gemäß der oben beschriebenen Zugriffskontrolle. Diese Codezeilen erweitern die Datei »model.js« . Der Aufruf der Methode »allow()« beschreibt (Zeilen 2 bis 5) die Ereignisbehandlung beim Aufruf von »remove()« : Nur wenn die Rückruffunktion den Wert »True« zurückgibt, wenn also der gegenwärtige Benutzer der Ersteller des Artikels ist, erlaubt ihm der Code den Beitrag zu löschen.

Listing 10

Zugriffskontrolle ./model.js

01 Articles.allow({
02   remove: function(userId, doc) {
03     return doc.owner === userId;
04   }
05 });
06
07 Meteor.methods({
08   upsert: function(id, title, text) {
09     if (!this.userId)
10       throw new Meteor.Error(403, 'Bitte erst anmelden');
11     var now = new Date();
12     var email = Meteor.user().emails[0].address
13     var doc = {owner: this.userId, title: title, text: text, date: now, email: email};
14     if (id) {
15       if (Articles.update({_id: id, owner: this.userId}, {$set: doc}) < 1)
16          throw new Meteor.Error(404, 'Zugriff nicht erlaubt');
17     } else {
18       Articles.insert(doc);
19     }
20   }
21 });

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.