
Gebruikers en gebruikers groepen in Joomla
Gebruikers vormen het hart van elke Joomla-website. Zodra je een loginformulier, een ledenomgeving of een backend-editor toevoegt, werk je met het gebruikerssysteem van Joomla.
Dat systeem lijkt aan de buitenkant eenvoudig, maar raakt bijna elk onderdeel van Joomla: zichtbaarheid van artikelen en modules, backendtoegang, redactionele workflows, aangepaste velden, beveiliging en zelfs het gedrag van je extensies.
Wie je bent, wat je mag zien en wat je mag doen.
Dit artikel legt uit hoe Joomla-gebruikers echt werken. Het behandelt de basis voor website-eigenaren, de praktische inrichting voor beheerders en de technische details voor ontwikkelaars. Je leert hoe gebruikersaccounts, gebruikersgroepen, toegangsniveaus en rechten samenhangen, en hoe je de meest voorkomende fouten voorkomt.
Het doel is simpel: je helpen het gebruikerssysteem van Joomla goed genoeg te begrijpen om het met vertrouwen te beheren.
1. De basis
1.1 Waarom gebruikers belangrijk zijn
Zonder goed gebruikersbeheer ziet iedere bezoeker dezelfde website. Je kunt geen beheerderstoegang beperken, geen content beschermen, geen ledenomgeving maken en geen onderscheid maken tussen redacteuren en bezoekers. Beveiligingsproblemen liggen dan al snel op de loer.
Met Joomla's gebruikerssysteem kun je publieke, leden-only en staff-only content naast elkaar gebruiken. Je kunt specifieke taken aan specifieke mensen geven, zelfregistratie en wachtwoordherstel aanbieden, en multi-factor authenticatie inschakelen.
1.2 De drie pijlers
Joomla verdeelt gebruikersbeheer in drie onafhankelijke bouwstenen. Als je deze drie pijlers begrijpt, begrijp je de kern van het hele systeem:
| Pijler | Beantwoordt de vraag | Waar vind je het? |
|---|---|---|
| Gebruikersgroepen | Wie ben je? | Gebruikers → Groepen |
| Toegangsniveaus | Wat mag je zien? | Gebruikers → Toegangsniveaus |
| Rechten (ACL) | Wat mag je doen? | Algemene instellingen plus elke component, categorie en elk item |
De rest van dit artikel gaat over hoe deze drie pijlers samenwerken.
1.3 Waar vind ik gebruikers?
In de Joomla 6-backend beheer je het gebruikerssysteem via het menu Gebruikers:
Gebruikers → Beheren (alle gebruikersaccounts)
Gebruikers → Groepen (gebruikersgroepen)
Gebruikers → Toegangsniveaus (weergavetoegangsniveaus)
Gebruikers → Velden (aangepaste profielvelden)
Gebruikers → Gebruikersnotities (interne notities per gebruiker)
Rechten staan op een andere plek: het tabblad Rechten in Algemene instellingen, in de opties van elke component, en in categorieën en items.
2. Het gebruikersaccount
2.1 Wat is een Joomla-gebruiker?
Een gebruiker is één account dat kan inloggen op de frontend, de backend of beide. Elke gebruiker is één rij in de databasetabel #__users. Een gebruiker is gekoppeld aan één of meer groepen en kan profielvelden, gebruikersnotities en multi-factor authenticatiemethoden hebben.
Een gebruiker heeft een unieke id, username en email. Een gebruiker zonder groep is technisch geldig, maar kan nergens inloggen.
2.2 Accountvelden
Elk Joomla-gebruikersaccount heeft deze ingebouwde velden:
- Naam: de weergavenaam, getoond bij artikelen en contactformulieren.
- Gebruikersnaam: gebruikt om in te loggen, hoofdlettergevoelig in Joomla 6.
- E-mail: moet uniek zijn binnen de website.
- Wachtwoord: gehasht met bcrypt, nooit als platte tekst opgeslagen.
- Registratiedatum / Laatste bezoek / Laatste reset: tijdstempels die Joomla automatisch bijhoudt.
- Blokkeren: schakelt inloggen uit zonder het account te verwijderen.
- Systeemmails ontvangen: opt-in voor beheerdersmeldingen.
- Wachtwoordreset verplichten: dwingt een wachtwoordwijziging af bij de volgende login.
2.3 Een gebruiker aanmaken
Er zijn twee manieren om een gebruiker in Joomla aan te maken:
- Backend:
Gebruikers → Beheren → Nieuw. Een beheerder maakt het account aan, kiest de groep en stelt het wachtwoord in. Een e-mail versturen is optioneel. - Frontend: de registratieweergave op
/index.php?option=com_users&view=registration. De bezoeker registreert zichzelf en komt standaard in de groep Registered.
De activatiestroom voor zelfregistratie regel je via Algemene instellingen → Gebruikers → Component. Je kunt kiezen voor geen, zelfactivatie of beheerderactivatie.
2.4 Twee manieren om een gebruiker uit te schakelen
| Optie | Wat het doet | Wanneer gebruiken |
|---|---|---|
| Blokkeren | Het account blijft bestaan, maar inloggen wordt geweigerd. | Tijdelijke schorsing, of een gebruiker die later kan terugkeren. |
| Verwijderen | De gebruikersrij wordt uit de database verwijderd. | Account nooit gebruikt, of een AVG-verwijderverzoek. |
Een gebruiker verwijderen verwijdert niet zijn of haar content. Artikelen houden created_by op het oude id, dat nu nergens meer naar verwijst. Als auteurschap belangrijk is, wijs de content eerst opnieuw toe en verwijder daarna de gebruiker.
2.5 Gebruikersnotities, de vergeten functie
Onder Gebruikers → Gebruikersnotities kun je interne notities aan elke gebruiker koppelen. Gebruikersnotities zijn:
- Gecategoriseerd, ja, gebruikersnotities gebruiken ook
com_categories. - Handig voor supporttickets, lidmaatschapsgeschiedenis en moderatielogs.
- Onzichtbaar voor de gebruiker zelf.
Veel website-eigenaren ontdekken Gebruikersnotities nooit, maar ze zijn een uitstekende audittrail voor ledensites en klantportalen.
3. Gebruikersgroepen
3.1 Wat is een gebruikersgroep?
Een gebruikersgroep is een gelabelde verzameling gebruikers. De groep zelf bevat nog geen rechten. Rechten worden later aan de groep toegekend via de ACL.
Drie regels om te onthouden:
- Een gebruiker kan tegelijk tot meerdere groepen behoren.
- Groepen kunnen genest zijn in een ouder-kindstructuur.
- Een childgroep erft de rechten van de parentgroep, tenzij je ze overschrijft.
De groep is het belangrijkste ACL-concept. Zet je groepen goed neer, dan valt de rest van het systeem op zijn plek.
3.2 De standaardgroepen in Joomla 6
Standaard levert Joomla deze groepsstructuur mee:
Public
├── Guest
├── Manager
│ └── Administrator
├── Registered
│ └── Author
│ └── Editor
│ └── Publisher
└── Super Users
Elke groep heeft een specifieke rol:
- Public: iedere bezoeker, ingelogd of niet.
- Guest: expliciet niet ingelogd.
- Registered: elke ingelogde frontendgebruiker.
- Author, Editor, Publisher: oplopende contentrechten op de frontend.
- Manager, Administrator: backendtoegang met oplopende bevoegdheden.
- Super Users: onbeperkt, kan alles overal.
3.3 Overerving in de praktijk
Een groep erft rechten, geen gebruikers. Dit zorgt vaak voor verwarring. Een voorbeeld:
- Een gebruiker toevoegen aan Editor voegt die gebruiker niet automatisch toe aan Author.
- Maar de groep Editor erft de rechten van Author, dus een Editor kan alles wat een Author kan.
- Als je "Verwijderen" op Geweigerd zet voor Editor, wordt de overerving voor die ene actie doorbroken.
Kort gezegd: overerving loopt naar beneden door de groepsstructuur, maar gebruikerstoewijzingen gelden alleen voor de gekozen groep.
3.4 Een aangepaste groep aanmaken
Ga naar Gebruikers → Groepen → Nieuw. Er zijn maar twee verplichte velden:
| Veld | Doel |
|---|---|
| Groepstitel | De weergavenaam, bijvoorbeeld Newsroom Editors. |
| Bovenliggende groep | Waar de groep in de boomstructuur komt. |
De keuze van de parent bepaalt met welke rechten je begint. Kies de dichtstbijzijnde match, zodat je later minder hoeft te overschrijven.
Veelgebruikte aangepaste groepen in de praktijk:
- Leden (parent: Registered): betalende leden van een community.
- Moderators (parent: Editor): forum- of commentmoderatie.
- Sitebeheerders (parent: Administrator): backendtoegang zonder Super User-rechten.
3.5 Many-to-many in actie
Eén gebruiker kan tegelijk in meerdere groepen zitten. Voorbeeld: Jane is Newsroom Editor voor content en Forum Moderator.
- Open
Gebruikers → Beheren → Jane → Toegewezen gebruikersgroepen. - Vink beide groepen aan.
- Jane krijgt nu de combinatie van de rechten van beide groepen.
Als de ene groep een actie Toestaat en een andere groep niet, wint Toestaan, tenzij een derde groep dezelfde actie expliciet Weigert. De regel "Weigeren wint altijd" maakt deze combinatie veilig.
4. Toegangsniveaus
4.1 Wat is een toegangsniveau?
Een toegangsniveau beantwoordt één vraag: "Welke groepen mogen dit zien?"
Toegangsniveaus vind je onder Gebruikers → Toegangsniveaus. Elk toegangsniveau heeft een titel en een lijst met groepen die toegang krijgen. Het niveau kan vervolgens worden toegewezen aan artikelen, modules, menu-items, categorieën, contacten en bijna elk ander contenttype.
Het verschil tussen groepen en toegangsniveaus is subtiel maar belangrijk:
- Een groep zegt wie je bent.
- Een toegangsniveau zegt wie deze content mag zien.
4.2 De standaard toegangsniveaus
Standaard heeft Joomla deze toegangsniveaus:
| Niveau | Toegekend aan | Typisch gebruik |
|---|---|---|
| Public | Public-groep | Iedereen, ingelogd of niet. |
| Guest | Guest-groep | Alleen zichtbaar voor anonieme bezoekers. |
| Registered | Registered en alle childgroepen | Alleen ingelogde leden. |
| Special | Author en hoger | Redacteuren, staff en beheerders. |
| Super Users | Alleen Super Users | Gevoelige modules alleen voor beheerders. |
4.3 Een aangepast toegangsniveau aanmaken
Een typische praktijkwens is: "Premiumleden kunnen het volledige artikel lezen; iedereen ziet alleen de teaser."
Ga naar Gebruikers → Toegangsniveaus → Nieuw en stel het zo in:
Titel: Premium Content
Groepen: [x] Premium Members
[x] Super Users (altijd opnemen, anders sluit je jezelf buiten)
Zet nu het veld Toegang van een artikel op Premium Content, en alleen premiumleden plus Super Users zien het.
4.4 De Guest access level-truc
Het toegangsniveau Guest is alleen toegekend aan de groep Guest: bezoekers die niet zijn ingelogd. Dit niveau is erg handig voor websites die reageren op loginstatus.
Klassieke toepassingen:
- Een loginmodule die verdwijnt zodra de gebruiker is ingelogd.
- Een "Schrijf je in voor onze nieuwsbrief"-banner alleen voor anonieme bezoekers.
- Teasercontent die na login wordt vervangen door de volledige versie.
Je kunt een Guest-module en een Registered-module op dezelfde positie combineren. Joomla toont de juiste module op basis van de loginstatus van de bezoeker.
4.5 Waar toegangsniveaus worden toegepast
Dezelfde dropdown voor toegangsniveaus zie je op veel plekken. Toegangsniveaus regelen zichtbaarheid voor:
- Artikelen, categorieën en uitgelichte items.
- Menu-items, een menu-item voor Registered verdwijnt voor anonieme bezoekers.
- Modules, per positie en per pagina.
- Contacten, nieuwsfeeds en banners.
- Aangepaste velden, verberg individuele velden per toegangsniveau.
Dezelfde dropdown, hetzelfde effect, overal.
5. Rechten (ACL)
5.1 Van zichtbaarheid naar actie
Toegangsniveaus bepalen wie iets kan zien. Rechten bepalen wie iets kan doen. De Joomla ACL beantwoordt vragen zoals:
- Mag deze groep artikelen aanmaken?
- Mogen ze alleen hun eigen artikelen bewerken, of elk artikel?
- Mogen ze publiceren?
- Mogen ze artikelen verwijderen binnen een specifieke categorie?
- Mogen ze überhaupt inloggen op de backend?
5.2 De standaard actieset
De meeste componenten tonen dezelfde acties. Sommige voegen daar eigen acties aan toe:
| Actie | Betekenis |
|---|---|
| Site Login | Mag inloggen op de frontend. |
| Administrator Login | Mag inloggen op de backend. |
| Offline Access | Mag de website zien terwijl die offline staat. |
| Super User | Onbeperkt, overschrijft alles hieronder. |
| Configure | Mag de opties van een component aanpassen. |
| Access Administration Interface | Mag de component openen in de backend. |
| Create | Mag nieuwe items aanmaken. |
| Delete | Mag items verwijderen. |
| Edit | Mag elk item bewerken. |
| Edit State | Mag items publiceren, depubliceren, archiveren of naar de prullenbak verplaatsen. |
| Edit Own | Mag alleen items bewerken die de gebruiker zelf heeft aangemaakt. |
| Edit Custom Field Value | Mag waarden in aangepaste velden wijzigen. |
5.3 De vier rechtentoestanden
Voor elke combinatie van actie en groep kies je één van deze toestanden:
| Toestand | Effect |
|---|---|
| Overgenomen | Neem over wat de parentcontext zegt, dit is de standaard. |
| Toegestaan | Geef de actie expliciet vrij. |
| Geweigerd | Verbied de actie expliciet en vergrendel die op alle lagere niveaus. |
| Niet ingesteld | Alleen bovenaan de boom, behandeld als Geweigerd. |
Na opslaan toont Joomla het berekende resultaat naast je instelling: Toegestaan, Niet toegestaan of het gevreesde Niet toegestaan (vergrendeld).
5.4 De rechtenhiërarchie
Rechten lopen via vier niveaus, waarbij elk niveau het niveau erboven kan overschrijven:
Algemene instellingen
└── Componentopties (bijvoorbeeld com_content)
└── Categorierechten
└── Itemrechten (per artikel)
De praktische aanpak is:
- Zet een basislijn in Algemene instellingen.
- Versoepel of verscherp per component.
- Overschrijf per categorie voor onderdelen zoals "Persberichten, alleen staff".
- Gebruik het itemniveau alleen als laatste redmiddel.
5.5 De Deny-valkuil
De belangrijkste ACL-regel in Joomla is kort: Weigeren wint altijd.
Als een groep in Algemene instellingen op Geweigerd staat, kan geen Toestaan lager in de structuur dat herstellen. De lagere niveaus tonen letterlijk Niet toegestaan (vergrendeld) en maken de dropdown grijs.
Praktische richtlijnen:
- Gebruik standaard overal Overgenomen.
- Gebruik Toegestaan om rechten naar beneden toe te verlenen.
- Gebruik Geweigerd alleen wanneer je wilt dat de regel permanent en absoluut is, meestal op globaal niveau voor veiligheid.
- Als je een recht kwijt bent en niet snapt waarom, loop dan omhoog in de boom en zoek naar een Weigering.
5.6 Algemene instellingen: tabblad Rechten
Open Systeem → Algemene instellingen → Rechten. Dit bepaalt de standaard voor de hele website. Een typische basislijn ziet er zo uit:
| Groep | Site Login | Admin Login | Super User |
|---|---|---|---|
| Public | Overgenomen (Niet toegestaan) | Overgenomen | Overgenomen |
| Registered | Toegestaan | Overgenomen | Overgenomen |
| Author / Editor / Publisher | Toegestaan | Overgenomen | Overgenomen |
| Manager | Toegestaan | Toegestaan | Overgenomen |
| Administrator | Toegestaan | Toegestaan | Overgenomen |
| Super Users | Toegestaan | Toegestaan | Toegestaan |
Zet deze laag goed neer, en ongeveer 80% van de ACL-"vreemdheden" verdwijnt.
5.7 Rechten op componentniveau
Elke component heeft een knop Opties in de toolbar met een eigen tabblad Rechten. Voor com_content (Artikelen) kun je bijvoorbeeld:
- Aanmaken aanscherpen, zodat alleen Authors en hoger artikelen kunnen schrijven.
- Status bewerken toestaan voor Publishers, maar niet voor Authors en Editors.
- Toegang tot beheerinterface geven aan een groep Newsroom zonder ze Manager te maken.
Hier vindt de meeste dagelijkse ACL-configuratie plaats.
5.8 Rechten op categorieniveau
Open een categorie en kies het tabblad Rechten. Hier verfijn je rechten voor een specifieke sectie:
- Leden mogen artikelen Aanmaken in de categorie Ledenverhalen.
- Leden mogen Eigen items bewerken, maar niet Bewerken van items van anderen.
- Newsroom mag Status bewerken in Persberichten, maar nergens anders.
Categorierechten zijn het juiste gereedschap voor redactionele workflows met meerdere teams. Je kunt newsroom, blog en ledencontent scheiden zonder iemand globaal "Bewerken" te geven.
5.9 Rechten op itemniveau
Elk artikel, en veel andere items, heeft een eigen tabblad Rechten. Gebruik dit spaarzaam: zet één gevoelig artikel dicht, of open één item als uitzondering voor een bredere groep. Als je veel individuele items moet overschrijven, is een nieuwe categorie meestal de betere oplossing.
5.10 Praktijkvoorbeeld: Newsroom Editors
Het doel is een groep Newsroom Editors die de categorie Persberichten volledig kan beheren, en verder niets. De stappen:
- Groep: maak Newsroom Editors aan met parent Registered.
- Algemene instellingen → Rechten: geef Newsroom Editors zowel Site Login als Administrator Login als Toegestaan.
- Artikelopties → Rechten: geef Newsroom Editors Toegang tot beheerinterface als Toegestaan. Laat de rest op Overgenomen.
- Categorie Persberichten → Rechten: geef Newsroom Editors Aanmaken, Bewerken, Status bewerken en Verwijderen als Toegestaan.
- Alle andere categorieën: laat alles overgenomen. De newsroom kan andere categorieën zien, maar niet aanpassen.
Klaar. Geen Super User, geen overbodige privileges.
6. Alles bij elkaar
6.1 Het complete beeld
De relatie tussen de vier ACL-concepten kun je het best zien als een stroom:
GEBRUIKER → behoort tot → GROEP(en)
│
│ geeft zichtbaarheid via
▼
TOEGANGSNIVEAU → Artikel / Module / Menu-item
│
│ geeft acties via
▼
RECHTEN (ACL)
├── Algemene instellingen
├── Component
├── Categorie
└── Item
Kort gezegd: een gebruiker zit in een groep; een groep opent toegangsniveaus en draagt rechten; toegangsniveaus regelen zichtbaarheid; rechten regelen acties.
6.2 Frontend versus backendtoegang
| Doel | Configuratie |
|---|---|
| Bezoeker kan publieke artikelen lezen | Standaardinstellingen, toegangsniveau Public. |
| Bezoeker moet inloggen om te lezen | Zet het veld Toegang van het artikel op Registered. |
| Ingelogde gebruiker kan artikelen indienen | Groep heeft Aanmaken-recht op de categorie, plus een frontend menu-item voor indienen. |
| Gebruiker kan artikelen beheren in /administrator | Groep heeft Administrator Login plus Toegang tot beheerinterface op de component. |
Frontend en backend worden door dezelfde ACL geregeld. Alleen de rechtvlaggen verschillen.
7. Multi-factor authenticatie en beveiliging
7.1 Native MFA in Joomla 6
Joomla 4 introduceerde native multi-factor authenticatie, en Joomla 6 verfijnt dit verder. De ondersteunde methoden zijn:
- TOTP: tijdgebaseerde eenmalige wachtwoorden, gebruikt door Google Authenticator en vergelijkbare apps.
- WebAuthn: passkeys en hardwarebeveiligingssleutels.
- YubiKey: een hardwaretoken.
- E-mail OTP: een code die per e-mail wordt verzonden.
- Vaste code: alleen nuttig voor testen.
Elke gebruiker kan MFA zelf inschakelen, of je kunt het afdwingen voor volledige groepen via de plugin Captive MFA. Back-upcodes worden automatisch gegenereerd, en je moet gebruikers altijd eraan herinneren die veilig op te slaan.
7.2 De captive login-flow
Joomla gebruikt een captive model: een ingelogde gebruiker die nog niet voldoet aan de MFA-eis blijft vast op de MFA-instelpagina totdat dit is afgerond. De gebruiker kan niet weg navigeren.
Je configureert dit via Gebruikers → Beheren → Opties → Multi-factor authenticatie. Het is een krachtige manier om een organisatiebrede beveiligingsregel af te dwingen zonder één regel code te schrijven.
7.3 Nuttige gebruikersgerelateerde plugins
Verschillende plugins breiden Joomla's gebruikerssysteem uit. Je vindt ze onder Systeem → Beheren → Plugins, gefilterd op Gebruiker en Authenticatie:
- User - Joomla: core profilsynchronisatie, schakel deze niet uit.
- User - Profile: extra profielvelden, zoals geboortedatum of akkoord met voorwaarden. Je kunt hiervoor ook Joomla's aangepaste velden bij Gebruikers gebruiken.
- User - Contact Creator: maakt automatisch een Contact-item aan voor elke nieuwe gebruiker. Synchroniseert gegevens niet meer nadat gebruiker/contact zijn aangemaakt.
- Authentication - Joomla / LDAP / Cookie: verschillende loginmethoden.
- Multi-factor Authentication - ...: één plugin per MFA-methode.
Voor aangepaste logica kun je je eigen User-plugin schrijven die reageert op events zoals onUserBeforeSave, onUserAfterSave, onUserLogin en onUserLogout.
7.4 Aangepaste profielvelden
Er zijn twee manieren om aangepaste profieldata aan gebruikers toe te voegen:
- Aangepaste velden onder
Gebruikers → Velden: een point-and-click manier om tekst, lijst, kalender, media en andere veldtypes toe te voegen. Elk veld kan een eigen toegangsniveau hebben, zodat alleen specifieke groepen het zien. - User Profile-plugin: een codegedreven aanpak, ideaal voor verplichte gestructureerde data zoals geboortedatum of akkoord met voorwaarden.
In Joomla 6 zijn aangepaste velden meestal de juiste keuze. Gebruik de plugin alleen wanneer je server-side validatielogica nodig hebt.
8. Onder de motorkap (developer view)
8.1 De huidige gebruiker ophalen
De aanbevolen manier om de huidige gebruiker in Joomla 6 op te halen is via het applicatieobject:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$user = $app->getIdentity();
if ($user->guest) {
// niet ingelogd
}
echo $user->id;
echo $user->username;
echo $user->name;
De oudere methode Factory::getUser() werkt nog, maar is deprecated. Gebruik $app->getIdentity() in nieuwe code.
8.2 Rechten controleren in code
De methode authorise() is de kern van ACL aan de PHP-kant:
$user = Factory::getApplication()->getIdentity();
// Mag deze gebruiker elk artikel bewerken?
if ($user->authorise('core.edit', 'com_content')) {
// ...
}
// Mag deze gebruiker artikelen in categorie 7 bewerken?
if ($user->authorise('core.edit', 'com_content.category.7')) {
// ...
}
// Mag deze gebruiker dit specifieke artikel bewerken?
if ($user->authorise('core.edit', 'com_content.article.42')) {
// ...
}
De asset-string (com_content.category.7) laat Joomla automatisch omhoog door de hiërarchie lopen. Je hoeft Global, Component, Category en Item niet zelf te controleren.
8.3 Toegangsniveaus controleren in code
Wil je controleren wat een gebruiker mag zien, vraag dan de geautoriseerde weergaveniveaus op:
$user = Factory::getApplication()->getIdentity();
$viewLevels = $user->getAuthorisedViewLevels(); // array met niveau-ID's
if (in_array($article->access, $viewLevels, true)) {
// gebruiker mag dit artikel zien
}
In databasequeries gebruik je dezelfde array aan de rechterkant van een IN(...)-filter:
$query->whereIn($db->quoteName('a.access'), $user->getAuthorisedViewLevels());
Elke core Joomla-query die content teruggeeft, doet precies dit.
8.4 Je eigen acties declareren: access.xml
Een custom component declareert zijn actieset in administrator/components/com_yourcomp/access.xml:
<?xml version="1.0" encoding="utf-8"?>
<access component="com_yourcomp">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN" />
<action name="core.options" title="JACTION_OPTIONS" />
<action name="core.manage" title="JACTION_MANAGE" />
<action name="core.create" title="JACTION_CREATE" />
<action name="core.delete" title="JACTION_DELETE" />
<action name="core.edit" title="JACTION_EDIT" />
<action name="core.edit.state" title="JACTION_EDITSTATE" />
<action name="core.edit.own" title="JACTION_EDITOWN" />
</section>
<section name="category">
<action name="core.create" title="JACTION_CREATE" />
<action name="core.delete" title="JACTION_DELETE" />
<action name="core.edit" title="JACTION_EDIT" />
<action name="core.edit.state" title="JACTION_EDITSTATE" />
<action name="core.edit.own" title="JACTION_EDITOWN" />
</section>
</access>
Deze acties verschijnen automatisch als kolommen op het tabblad Rechten.
8.5 Nuttige databasetabellen
Het Joomla-gebruikerssysteem gebruikt verschillende coretabellen:
| Tabel | Bevat |
|---|---|
#__users |
Gebruikersaccounts. |
#__usergroups |
De groepsboom, opgeslagen met lft/rgt. |
#__user_usergroup_map |
Many-to-many koppeling van gebruikers aan groepen. |
#__viewlevels |
Toegangsniveaus met een geserialiseerde groepslijst. |
#__assets |
De assetboom, één rij per component, categorie of item. |
#__user_notes |
Gebruikersnotities, met eigen categorieën. |
#__user_profiles |
Key-valueparen van de User Profile-plugin. |
#__user_mfa |
MFA-methoden per gebruiker. |
8.6 ACL inspecteren in de database
De kolom rules in #__assets is gewone JSON. Zodra je die kunt lezen, is ACL geen black box meer. Voorbeeld:
{
"core.edit": { "3": 1, "5": 0 },
"core.edit.state": { "5": 1 },
"core.delete": { "8": 1 }
}
| Waarde | Betekenis |
|---|---|
1 |
Toestaan |
0 |
Weigeren |
| Sleutel ontbreekt | Overnemen van de parent-asset |
Deze asset staat dus core.edit toe voor groep 3 (Author), weigert het voor groep 5 (Editor, dus vergrendeld), en laat alle andere groepen overnemen.
8.7 Drie SQL-query's die elke Joomla-ontwikkelaar moet kennen
De volgende query's helpen je gebruikers-, groeps- en ACL-problemen direct in de database te debuggen:
1. Alle groepen waartoe een gebruiker behoort
SELECT u.username, g.title
FROM jos_users u
JOIN jos_user_usergroup_map m ON u.id = m.user_id
JOIN jos_usergroups g ON g.id = m.group_id
ORDER BY u.username;
2. Toegangsniveaus en hun groepslijsten
SELECT id, title, rules
FROM jos_viewlevels;
3. Elke asset met expliciete, niet-overgenomen regels
SELECT id, name, rules
FROM jos_assets
WHERE rules != '{}';
Vervang jos_ door je echte databaseprefix.
9. Veelgemaakte fouten en valkuilen
9.1 Weigeren is definitief
Een Weigering in Algemene instellingen kan lager in de structuur niet meer worden Toegestaan. De lagere niveaus tonen Niet toegestaan (vergrendeld) en maken de dropdown grijs. Gebruik Weigeren alleen wanneer je een regel absoluut wilt maken.
9.2 Groepsovererving verwarren met gebruikersovererving
Overerving geldt voor rechten, niet voor gebruikers. Een gebruiker toevoegen aan Editor voegt die gebruiker niet ook toe aan Author. Maar de Editor-groep erft wel de rechten van Author voor elke actie.
9.3 Super User te vaak gebruiken
Super User overschrijft elke Weigering en elke beperking. Het is verleidelijk om Super User te geven "om het werkend te krijgen", maar daarmee haal je alle vangrails weg. Beperk de Super Users-groep tot één of twee volledig vertrouwde personen.
9.4 Super Users vergeten in een aangepast toegangsniveau
Wanneer je een nieuw toegangsniveau maakt, neem dan altijd Super Users op in de groepslijst. Anders kun je jezelf buitensluiten van content die alleen je aangepaste groep mag zien.
9.5 Guest en Public door elkaar halen
Deze twee lijken op elkaar, maar betekenen iets anders:
- Public: iedereen, ingelogd of niet.
- Guest: expliciet niet ingelogd.
Een Public-module wordt aan alle bezoekers getoond. Een Guest-module verdwijnt zodra een gebruiker inlogt.
9.6 Een gebruiker verwijderen behoudt de content
Als je een gebruiker verwijdert, blijven de artikelen, contacten en andere items in de database staan met een created_by-veld dat naar een niet-bestaande gebruiker verwijst. Wijs auteurschap eerst opnieuw toe en verwijder daarna het account.
9.7 Public opnemen in aangepaste toegangsniveaus
Als je de Public-groep aanvinkt in een aangepast toegangsniveau, wordt dat niveau in feite gelijk aan "Public". Iedereen kan de content zien, en daarmee is het doel van het aangepaste niveau weg.
9.8 Rebuild overslaan na directe databasewijzigingen
Als je regels direct in #__assets bulk-bewerkt of gebruikers via SQL importeert, moet je mogelijk de assetboom opnieuw opbouwen en de cache legen. Anders blijft de interface oude resultaten tonen.
10. Best practices en snelle referentie
10.1 Een veilige ACL-workflow
- Plan eerst je groepen, op papier. Teken de boom.
- Zet de rechten in Algemene instellingen op een bekende, veilige basislijn. Sla op en test.
- Stel daarna componentrechten per component in. Sla op en test.
- Maak pas daarna aangepaste toegangsniveaus aan en gebruik ze.
- Gebruik categorierechten voor redactionele workflows.
- Raak itemrechten alleen aan als laatste redmiddel.
- Documenteer elke aangepaste groep en elk aangepast toegangsniveau in het overdrachtsdocument van de website.
Een praktische regel: als je je ACL niet op één A4 kunt tekenen, is het te complex. Vereenvoudig.
10.2 Performance-tips
Grote ACL-bomen kosten performance. Veelvoorkomende oorzaken van trage sites:
- Honderden gebruikersgroepen, probeer onder de twintig te blijven.
- Diep geneste groepshiërarchieën, meer dan vier niveaus wordt traag.
- Per-artikel rechtenoverschrijvingen vermenigvuldigd over duizenden artikelen.
- Te veel toegangsniveaus waar elke query rekening mee moet houden.
Als een Joomla-site traag aanvoelt na een rechtenrefactor, kijk dan eerst naar de ACL-boom.
10.3 Cheat sheet
GEBRUIKER Gebruikers → Beheren
GROEP Gebruikers → Groepen
TOEGANGSNIVEAU Gebruikers → Toegangsniveaus
RECHTEN Algemene instellingen + Componentopties + Categorie + Item
GROEPSREGEL Meerdere groepen per gebruiker, child erft rechten van parent
WEIGERREGEL Weigeren wint altijd, geen Toestaan lager kan dit herstellen
EERST ERVEN Gebruik standaard overal Overgenomen
INCLUDE SU Neem Super Users altijd op in aangepaste toegangsniveaus
REBUILD Na directe DB-wijzigingen, rebuild en cache legen
MFA Gebruikers → Beheren → Opties → Multi-factor authenticatie
PHP CURRENT Factory::getApplication()->getIdentity()
PHP AUTHORISE $user->authorise('core.edit', 'com_content.category.7')
PHP VIEWLEVELS $user->getAuthorisedViewLevels()
ASSET RULES #__assets.rules-kolom (JSON: 1 = Toestaan, 0 = Weigeren)
10.4 Snel mentaal model
- Gebruikers zijn wie je bent.
- Groepen bundelen gebruikers.
- Toegangsniveaus zeggen wat je kunt zien.
- Rechten zeggen wat je kunt doen.
11. Samenvatting
In Joomla is het gebruikerssysteem veel meer dan een loginformulier. Het beheert bijna elke laag van de website:
- Identiteit: wie kan inloggen en hoe.
- Zichtbaarheid: welke content aan wie wordt getoond.
- Bevoegdheid: wie mag aanmaken, bewerken, publiceren en verwijderen.
- Beveiliging: multi-factor authenticatie en groepsgebaseerde hardening.
- Workflow: redactionele teams met duidelijke grenzen.
- Developer-integratie: een gedeelde API voor gebruikers, groepen en ACL.
- Compliance: AVG, audittrails en toegangscontrole.
Een goed gepland gebruikerssysteem maakt een Joomla-website veilig, voorspelbaar en jarenlang makkelijk te onderhouden. Een slechte inrichting leidt tot beveiligingsrisico's, gefrustreerde redacteuren en ACL-puzzels die steeds groter worden.
Als je een nieuwe Joomla-site plant, migreert vanaf een oudere versie of een rechtenknoop op een bestaande site wilt oplossen, kijk dan eerst naar gebruikersgroepen, toegangsniveaus en rechten. Beheer je die drie pijlers, dan werkt Joomla met je mee in plaats van tegen je.


Joomla en Linux specialist voor snelle, veilige en schaalbare websites.


