Dag 14: Toegang verlenen tot content

Omdat we gisteren de klant rol hebben aangemaakt kunnen we vandaag nieuwe klanten maken om vervolgens een factuur te koppelen aan een specifieke klant.

Modules installeren

We gaan gebruik maken van twee nog niet geïnstalleerde modules: Shared E-mail en Node Acces User Reference. Die laatste is afhankelijk van Entity Reference en Entity API. Download, installeer en activeer al deze modules zodat je in één keer klaar bent.

De Shared E-mail module installeren we puur voor het gemak en hebben we alleen tijdens de ontwikkelingsfase nodig om meerdere gebruikers te kunnen maken met hetzelfde e-mail adres. Standaard laat Drupal twee registraties met hetzelfde adres namelijk niet toe (en terecht). Maar aangezien we een aantal dummy gebruikers moeten aanmaken voor testdoeleinden is dit net even wat makkelijker. Ook helpt het ons op dag 16 om te controleren of de e-mail aankomt die naar de klant verstuurd moet worden op het moment dat er een factuur is gepubliceerd.

Veel belangrijker is de Node Acces User Reference module. De naam zegt het eigenlijk al, deze module regelt de toegang tot content (node acces) met betrekking tot de gebruiker (user) aan wie wordt gerefeerd (reference). Dat refereren doet de auteur wanneer hij een factuur opstelt door de naam van de klant in te voeren tot wie de factuur behoort.

Het eerste wat we dan ook moeten doen is een veld toevoegen aan het Factuur content type zodat een redacteur een klant kan selecteren. Het hiervoor benodigde veld is er nieuw bijgekomen door het installeren van de Entity Reference module. Tijdens het maken van dit veld kunnen we de rechten instellen die een gerefereerde klant moet krijgen, in dit geval alleen het recht om de factuur te bekijken.

User entity reference field toevoegen

Ga naar structuur > inhoudstypen en klik achter facturen op velden beheren. Dit is bekend terrein. Maak een nieuw veld aan met als label klant, als veldtype Entity Reference en widgettype Autocomplete (of je eigen voorkeur).

Druk op opslaan om de veldinstellingen te bepalen.

Bovenaan de veldinstellingen kun je het target type instellen, zet dit op gebruiker.

Entity selection mode mag op simple blijven staan en Sort by op don't sort.

Klik onderaan op veldinstellingen indienen om verder te gaan.

In het volgende venster vink je allereerst aan dat het om een verplicht veld gaat. 

Gelijk daaronder kun je onder het kopje NODE ACCESS USER REFERENCE de rechten instellen. Alles onder dit kopje is het werk van de Node User Acces Reference module. Je hebt hier een hele riks van opties waarvan je er maar één hoeft aan te vinken; het laatste puzzelstukje voor het functioneren van de klantenportal. Bovenaan onder het kopje Grants for referenced users on the node (rechten voor de gerefereerde gebruiker) plaats je een vinkje voor weergeven.
 
That's it. De rest staat goed. 
 
Wil je dat redacteuren facturen na het opslaan de factuur nog kunnen bewerken dan dien je onder het kopje Grants for author aan te vinken dat de auteur (de redacteur dus) content mag weergeven en bijwerken (en evt. verwijderen). In het drop-down menu hier direct onder geef je aan dat deze rechten moeten opgaan voor published EN unpublished nodes. Vervolgens selecteer je iets daaronder bij het kopje When to set grants de optie "always".
 
Als je voor autocomplete hebt gekozen als widgettype kun je alleen nog even controleren of deze op "contains" staat, zodat de auto-aanvul functie niet moelijk doet als we de eerste letter van een klant niet meer weten, maar wel een gedeelte van zijn naam.
Sla de instellingen op. Sleep nu het zojuist gemaakt klant veld helemaal naar boven zodat deze niet te missen is voor onze redacteurs. Sla op.
 
Voor klanten hoeft de inhoud van het veld (hun eigen naam) niet zichtbaar te zijn. Zoals je weet kun je dit regelen in het tabblad weergave beheren door hier voor alle weergaves het Klant veld onder verborgen te slepen.
Alles opgeslagen? Dan kunnen we nu twee gebruikers aanmaken om de functionaliteit mee te testen.

Klanten aanmaken

Navigeer in het hoofdmenu naar Personen. Daar aangekomen klik je op gebruiker toevoegen.

Verzin een naam en wachtwoord en vul jouw eigen e-mail adres in. Als rol selecteer je uiteraard Klant.

De optie Gebruiker informeren over nieuwe account mag je eventueel aanvinken als je wilt zien hoe de huidige welkoms e-mail eruit ziet.

Klik tot slot op nieuwe account aanmaken (De Shared E-mail module zal waarschijnlijk een waarschuwing geven dat het e-mail adres al gebruikt wordt, dit is slechts een waarschuwing en het account zal gewoon worden aangemaakt).

Herhaal hetzelfde riedeltje nog een keer en verzin een andere naam voor de tweede klant.

Facturen bewerken

Als laatste stap gaan we facturen toewijzen aan de zojuist gemaakte klanten. Als het goed is heb je al twee voorbeeld facturen klaar liggen. Klik in het hoofdmenu op Inhoud. Daarna klik je, in de lijst van content-items, achter één van de facturen op bewerken.

Het veld om de klant te specificeren zou nu bovenaan zichtbaar moeten zijn. Kies een gemaakte dummy klant uit aan wie je deze factuur wilt toewijzen.

Vergeet niet om de factuur te publiceren voordat je deze opslaat. Voor dit content type staat publicatie namelijk standaard uitgeschakeld.

Wijs vervolgens een andere factuur toe aan de andere klant.

Testing 1, 2, 3

Ben je klaar dan kun je in het hoofdmenu jezelf uitloggen, helemaal rechtsbovenaan. Bezoek vervolgens jouw website en log in als een klant (of voeg /user toe aan de URL van de website).

Aansluitend ga je onderaan in het gebruikersmenu naar "mijn facturen". Als het goed is krijg je nu alleen de factuur te zien die aan de huidige klant is toegewezen. 

Zo niet, ga dan nog eens na of de factuur wel gepubliceerd is.

Slot 

In views heb je dan wel niks gedaan met contextuele filters en relationships, toch heb je nu iets bewerkstelligd wat je ook hier mee zou kunnen doen. De nodes in het Factuuroverzicht worden namelijk pas zichtbaar wanneer aan een voorwaardelijke context voldaan is. In dit geval wordt die context bepaald door aan de ene kant de identiteit van bezoeker en aan de andere kant het referentie veld van de node. 

Het enige verschil is dat wanneer we een soortgelijk filter zouden maken in Views, dat dan alle facturen buiten de View om nog wel via de directe URL te benaderen zouden zijn door onbevoegden. Vanwege de Node Acces module maakt het niet uit of facuren in een lijst staan of apart worden bekeken, de contextuele voorwaarden worden altijd toegepast.

Laatst gewijzigd op: