Det er lang tid siden forrige indlæg, men der har været travlt med mange andre ting på arbejde og i fritiden.  Det er på tide at komme tilbage “on-track” med styrdindiabetes.dk.

Da jeg fornylig efter lang tids pause genoptog udvikling af styrdindiabetes.dk, virkede login med Facebook/Google/Microsoft pludselig ikke længere i Internet Explorer.  Årsagen er, at jeg i mellemtiden har opgraderet til fra Windows 8 til 8.1 med det resultat, IE er blevet opgraderet til version 11.

En spørgsmål på Mobile Services fora gav et svar fra en hjælpsom MSFT medarbejder: Jeg skulle opgradere Mobile Services JavaScript client library til nyeste version.

Mit forrige indlæg handlede om authorization via Windows Azure Mobile Services.  Authorization består af to elementer:

  1. Kun brugere, der er logget på, må kunne tilgå data.
  2. En bruger må kun kunne tilgå sit eget data.

Sidste gang diskuterede vi punkt 1 – denne gang bliver det punkt 2.

Udfordringen består i at forhindre, at en bruger læser eller redigerer i andre brugeres blodsukkermålinger.  Der er et hav af eksempler på, hvordan man sikrer, at en bruger ikke kan læse andre end sine egne data.  Det kræver blot følgende “where” clause i server-side node.js script for “Read”:

function read(query, user, request) {
    query.where({ userId: user.userId });
    request.execute();
}

Det kniber lidt mere med gode eksempler på, hvordan man f.eks. implementerer “Update” eller “Delete”.  For “Update” valgte jeg at benytte mig af det indbyggede MSSQL objekt, der kan bruges til at eksekvere rå SQL.  Som vi har talt om før, er data backend på Mobile Services blot en SQL Server:

   1:  function update(item, user, request) {
   2:      mssql.query('SELECT TOP 1 Id FROM Entries WHERE Id = ? AND userId = ?', [item.id, user.userId], {
   3:          success: function (results) {
   4:              if (results.length > 0) {
   5:                  item.userId = user.userId;
   6:                  request.execute();
   7:              }
   8:          }});
   9:  }

Idéen er, at jeg først checker, om der findes en entry med det pågældende id for den pågældende bruger.  Er det tilfældet, eksekverer jeg request’en. 

Linje 5 skal sikre, at brugeren ikke forsøger at putte en anden brugers ID på en blodsukkerregistrering.

“Delete” funktionen implementeres tilsvarende.

Vi er dermed klar til at slippe brugerne løs.  De kan logge ind med Facebook, Google eller en Microsoft konto, og de kan oprette blodsukkermålinger på livet løs uden at genere andre.