Afgeschermde pagina's

Veel websites hebben een afgeschermd deel voor bijvoorbeeld leden, medewerkers, personeel, enzovoorts. Maar hoe zorg je er nu voor dat de pagina’s ook alleen te bezoeken zijn voor je eigen doelgroep en niet voor anderen? Hiervoor moeten enkele zaken geregeld worden, zoals het schrijven van een klein programma.

Ik zal hieronder ervan uitgaan dat de doelgroep „medewerkers” is. Als de naam anders moet zijn, vervang dan hieronder „medewerkers” door je eigen naam.

Wat moet je allemaal doen

1. Je moet op een of andere manier de doelgroep kunnen onderscheiden van andere bezoekers van de website. De meest eenvoudige manier (vanuit beveiligingsoogpunt) is de juiste mensen toegang te geven tot deze pagina’s middels een login.
Vanuit beheersoogpunt kan dit echter problemen geven (zoals heeft iedereen met een inogcode nog wel toegang?, hoe verstrek ik iedereen een gebruikersnaam / wachtwoord?), maar daar gaat deze pagina niet over.

2. De speciale pagina’s voor de doelgroep moeten ook gekenmerkt worden. Dit is zeer simpel. Maak een nieuw inhoudstype aan:
D6: Beheren » Inhoudelijk beheer » Inhoudstypen - tabblad: Inhoudstype toevoegen.
D7: Structuur » Inhoudstypen » Inhoudstype toevoegen.

Geef deze een duidelijke naam, bijvoorbeeld: „Medewerkers” en type „medewerkers”. Zet in de beschrijving een toepasselijke tekst, zodat iedere beheerder weet waarvoor deze pagina bedoeld is.

3. Maak een kleine module met als naam: my_medewerkers. Deze module bestaat uit een map met de eigen naam en twee bestanden: my_medewerkers.info en my_medewerkers.module.

Voor Drupal 6 ziet het info bestand er als volgt uit:

name = Mijn Medewerkers
description = Aanpassing om nodes alleen voor
medewerkers toegankelijk te maken.
version = "6.x-1.0"
project = "
my_medewerkers"
core = 6.x

Het module bestand bestaat uit de volgende code:

<?php

function my_medewerkers_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
global $user;
  switch ($op) {
    case 'view':
      if ($a4 === TRUE) {
        // alleen voor ingelogde medewerkers
        if (($node->type == 'medewerkers') && (!$user->uid)) {
          drupal_goto('user/login', drupal_get_destination());
        }
      }
      break;
  }
}

Voor Drupal 7 ziet het info bestand er als volgt uit:

name = Mijn Medewerkers
description = Aanpassing om nodes alleen voor
medewerkers toegankelijk te maken.
version = "7.x-1.0"
project = "my_
medewerkers"
core = 7.x
files[] = my_medewerker.module

Het module bestand bestaat uit de volgende code:

<?php

function my_medewerkers_node_view($node, $view_mode, $language) {
  // alleen voor ingelogde medewerkers
  if (($node->type == 'medewerkers') && (!$GLOBALS['user']->uid) && ($view_mode != 'search_index')) {
    drupal_goto('user/login', array('query' => drupal_get_destination()));
  }
}

We beginnen met het opgeven dat de module een PHP-script is. Hierin gebeurt het volgende: als het inhoudstype ($node->type) gelijk is aan medewerkers, de bezoeker niet is ingelogd en de cron-job niet actief, dan wordt deze automatisch naar het inlogscherm doorgestuurd (instructiedeel: drupal_goto(‘user/login’,). Na het inloggen zal de medewerker automatisch de opgevraagde pagina te zien krijgen (instructiedeel: drupal_get_destination()).

Attentie: aan het eind van de module mag géén afsluitende „?>” staan ten teken dat het PHP-script ten einde is.

Als je de bezoeker (uid = 0) niet naar de inlogpagina wil verwijzen maar naar de voorpagina, gebruik dan: drupal_goto(”);

4. Installeer deze module net als alle andere modules in je website en activeer deze.

5. Maak nu nieuwe pagina’s voor de medewerkers aan met het inhoudstype „Medewerkers”.

6. De pagina’s moeten waarschijnlijk in het menu worden opgenomen, maar niet zichtbaar zijn voor gewone bezoekers. Maak een nieuw menu aan:
D6: Beheren » Site-constructie » Menu’s - tabblad: Menu toevoegen
D7: Structuur » Menu’s » Menu toevoegen.

met als naam Medewerkers. Zet alle speciale pagina’s in dit menu.

In Drupal 7 kan ook het gebruikersmenu hiervoor worden gebruikt.

7. Ga  nu naar Blokken:
D6: Beheren » Site-constructie » Blokken.
D7: Structuur » Blokken.

en schakel het menu in. Klik daarna op „instellen” naast de naam van dit blok en vink bij „Rol-specifieke zichtbaarheidsinstellingen” / „Rollen” alle rollen aan die dit menu mogen zien (dus niet: „anonymous user” / „anonieme gebruiker”) en sla dit blok op. Alleen de juiste groep ingelogde bezoekers kunnen nu dit blok zien.

8. Om te voorkomen dat bezoekers het bestaan van de node kunnen achterhalen moet de node niet getoond worden via de zoekmachine. Gebruik hiervoor de module search_restrict().

9. Als je module XML Sitemap (of een andere sitemap) gebruikt, denk er dan aan om bij de instellingen van het nieuwe inhoudstype op te geven dat de pagina niet in de sitemap opgenomen mag worden!

randomness