Bepalen welke records een bezoeker ziet
Doel
Leg één keer vast dat de records in een tabel horen bij de klant die ze noemen, zodat elke aangemelde portalbezoeker zijn eigen records ziet en die van niemand anders — via elke aangepaste API die je portal gebruikt, en via elke API die iemand later toevoegt.
Het probleem dat het oplost
Je portal leest via aangepaste API's, en een script kan nu al vragen wie de aanroep doet:
var mine = runQuery({
entity: 'par_ticket',
filter: { connector: 'And', conditions: [
{ field: 'par_customer', operator: 'Equals', value: portalCustomerId() }
]}
});
Dat werkt. Het werkt al sinds bezoekers zich kunnen aanmelden. Het probleem is dat het in elk script opnieuw moet worden geschreven, en dat je niet ziet wanneer het ontbreekt: een API zonder dat filter ziet er precies zo uit als een API mét, geeft zonder morren rijen terug en toont de ene klant de tickets van een andere.
Een portalrelatieregel haalt die zin uit de scripts en zet hem op de tabel.
Voordat je begint
- Je portal staat op Mensen die zich aanmelden — zie Bezoekers vragen zich aan te melden. Een tabel met een relatieregel kan niet worden gelezen door een portal die iedereen kan openen, omdat er dan niemand is aan wie de records toebehoren.
- Je tabel heeft een veld dat de klant bevat — een zoekveld naar Account is de gebruikelijke vorm, want dat is wat het bedrijf van een bezoeker is.
- Je bezoekers zijn lid van een klant. Iemand die zich heeft geregistreerd en nog bij geen enkel bedrijf hoort, komt met helemaal niets overeen — het veilige antwoord, en waarschijnlijk niet wat je hem wilt laten zien.
Stappen
-
Open je oplossing en kies Gegevensbeleid.
-
Druk op Nieuw en geef het een naam — Tickets horen bij hun klant.
-
Zet Type op Wiens records (portal).
-
Kies de tabel.
-
Schrijf de voorwaarde:
Record.par_customer == Portal.CustomerIdHet is de code-editor van het platform, dus een naam die hij niet kent, zoals
Portal.CustomrId, wordt onderstreept terwijl u typt in plaats van geweigerd bij het opslaan. -
Laat Van kracht aangevinkt en druk op Opslaan.
Dat is de hele functie. Er hoeft verder niets te worden toegekend, verwezen of ingeschakeld.
Waarmee je kunt vergelijken
Vijf gegevens over de aangemelde bezoeker, en de voorwaarde moet er minstens één noemen — anders zegt hij niet van wie deze records zijn.
| Wat het is | |
|---|---|
Portal.CustomerId | Het bedrijf waartoe hij behoort. Deze gebruik je bijna altijd |
Portal.ContactId | Zijn eigen contactrecord, als hij er een heeft |
Portal.UserId | De portalgebruiker zelf |
Portal.Email | Zijn e-mailadres |
Portal.Role | "Owner", "Billing" of "Member" bij zijn bedrijf |
Je kunt voorwaarden combineren met && en ||, en ook de eigen velden van de tabel vergelijken:
Record.par_customer == Portal.CustomerId && Record.par_status != "Draft"
CurrentUser is niet de bezoekerOp een portal is de "aangemelde gebruiker" de eigen server van de portal — één identiteit die
iedereen die hem gebruikt deelt. Daarom kan een relatieregel CurrentUser niet lezen, en kan een
gewoon gegevensbeleid Portal niet lezen. Het scherm weigert beide bij het opslaan.
Wat het precies doet
- Elke leesactie wordt beperkt, welke aangepaste API er ook om vraagt. Je kunt het filter verwijderen uit de scripts die er een hebben; het hoeft niet.
- Een aanmaakactie die een record op naam van een andere klant zou opslaan, wordt geweigerd, gemeten aan het record zoals het werkelijk wordt opgeslagen. Hetzelfde geldt voor een bewerking die er een zou verplaatsen.
- Een bezoeker die bij geen enkel bedrijf hoort, ziet niets — ook niet de records waarvan de klant leeg is.
- Eén regel per tabel. Moet je er een vervangen, schrijf dan de nieuwe met Van kracht uitgevinkt en wissel ze daarna om.
Wat het niet doet
Het maakt de tabel niet privé. Je eigen mensen, aangemeld bij het platform, zien wat hun beveiligingsrol hen laat zien, precies zoals eerst. De regel gaat over portalbezoekers; hij is geen vervanging voor een rol toegang geven tot records.
Hij wordt niet aan een rol toegekend, en het scherm weigert als je dat probeert. Hij hoort bij de tabel. Daar gaat het juist om — een regel die je moet onthouden toe te kennen, is een regel die je kunt vergeten toe te kennen.
Problemen oplossen
"Een portalrelatieregel moet zeggen welke records bij de bezoeker horen." Je voorwaarde noemt
Portal nergens. Zoals hij er staat, is het een gewoon filter, en dat is iets anders.
"…is al de portalrelatieregel voor…" Eén regel bepaalt van wie de records in een tabel zijn. Schakel de andere uit, of bewerk die in plaats van een tweede toe te voegen.
Een bezoeker ziet helemaal niets. Controleer of hij lid is van een klant, en of het veld in je voorwaarde echt het veld is dat de klant bevat — een voorwaarde die het verkeerde veld vergelijkt, komt bewust met niets overeen in plaats van met alles.
De portal weigert op te slaan met de tabel in zijn lijst. De portal staat op Iedereen. Een tabel waarvan de records bij een aangemelde bezoeker horen, heeft een portal nodig die er een heeft.