Deel makkelijk privé-bestanden tussen alle apparaten en teamleden | Hoe in Drupal 8 en NodeJS

11 okt 2017

Joris Snoek - Project lead
Vragen? Let me know!
020 - 261 14 99

Zoals in vorig blog omschreven bouwen we momenteel een messaging/chat app in Drupal 8 en NodeJS. Het delen van bestanden in messaging is essentieel: je wilt makkelijk en veilig bestanden kunnen delen tussen smartphone, tablet, desktop en laptop. En je wilt ze instant delen met gewenste teamleden -waarom en hoe in Drupal 8 en NodeJS:

Makkelijk delen van bestanden vanaf alle apparaten

Binnen onze app is het mogelijk om bestanden te delen in een channel, zodat ze vervolgens overal en voor iedereen beschikbaar zijn. Dus geen moeilijke omwegen meer om bestanden te delen vanaf mobiel naar laptop, wat nog vaak omslachtig gedaan wordt via e-mail, WeTransfer of zelfs via Facebook messenger (!).

Realtime delen
Zodra je een bestand deelt, dan is deze instant beschikbaar voor iedereen in betreffende channel. Als zij de app open hebben staan dan zien zij hem direct verschijnen zonder handmatig te hoeven verversen: het bestand wordt 'gepusht', net als bijvoorbeeld WhatsApp dat doet. We bouwen aan ondersteuning voor web, Android en iOS.

NodeJS
Deze realtime techniek voor chatten en instant delen van bestanden is mogelijk doordat we NodeJS hebben geïntegreerd. Deze machine wordt ook gebruikt door onder andere Netflix, Paypal, Uber, Spotify en NASA. Dit platform is speciaal geschikt voor realtime communicatie, streaming data en het betere API werk.

Makkelijk bestanden versturen van mobiel naar laptop/desktop of andersom

We bouwen niet alleen ondersteuning voor bestanden delen met teamleden, maar ook het sturen van persoonlijke bestanden vanaf je mobiele telefoon naar je laptop of desktop is makkelijk binnen de app.

Bestanden blijven binnen eigen domein

Doordat bestanden binnen deze app verstuurd worden, verlaten zij niet je eigen bedrijfsterrein. Zo kunnen Facebook, Google, etc (Lees: NSA) niet meekijken in je privé bestanden. Voornamelijk in het geval van gevoelige bedrijfsinformatie wil je niet dat bestanden en berichten het domein verlaten.

Custom private files implementatie in Drupal 8

Drupal 8 biedt ondersteuning voor private files, dat houdt in:

  • Bestanden staan buiten de webroot, zodat ze niet publiekelijk zijn.
  • Bestanden worden gedownload via een system-link, waardoor Drupal code bepaald of jij toegang hebt tot het bestand aan de hand van je persoonlijke login en gekoppelde permissies.
  • Het is mogelijk hier op maat aanvullingen voor te schrijven wanneer de Drupal core functies niet matchen met je gewenste user story. Dit gebeurd met behulp van hook_file_download().

1. Configureer de locatie voor de private files

Geef in je settings.php aan waar je private files komen te staan. In dit geval plaats ik ze buiten de webroot in de map private-files :

2. Schakel het Drupal private file system in

Ga in het backend naar Configuration => File system (/admin/config/media/file-system):

Kies hier Private local files served by Drupal.. Drupal zal nu alle files laten downloaden via code en niet via een directe link. De download zal gaan via het pad /system/files/filename in plaats van een publiekelijke link.

3. Gebruik hook_file_download() voor custom autorisatie

Binnen onze app mag het bestand alleen bekeken worden door mensen in het channel waar hij gedeeld is. Zit je niet in het channel dan mag je de file niet bekijken, ook niet als je de directe link weet. Channels zijn een custom entity in onze Drupal app, we zullen dus een custom permissie moeten schrijven om te bepalen of iemand die de file opvraagt deze wel of niet mag downloaden. Gelukkig heeft Drupal daar een hook voor hook_file_download() :

Hierin checken we:

  1. In welk channel is het bestand geüpload;
  2. Is ingelogde user member van betreffende channel;
  3. Zo ja: geef toegang tot het bestand, zo nee: blokkeer toegang.

Wrap it up

Wil je dus makkelijk en veilig bestanden delen met al jouw apparaten en geselecteerde teamleden, zonder dat externe instanties mee kunnen kijken? Drupal kan het voor je regelen, wij ook ;)

Happy sharing!

Credits header photo

Nóg meer
kennis nodig?

Check ons ons blog archief.

Digitale strategie en realisatie

Bel ons op 020 - 261 14 99, mail op hallo@luciuswebsystems.nl, of stuur een bericht: