Joomla User Groups Deep Dive — Nested Groups, Inheritance and Custom Access
In this tutorial, you'll learn advanced Joomla user group management — creating nested group structures, understanding permission inheritance, designing custom access control schemes for content, modules, and components, and troubleshooting ACL issues.
What You'll Learn
- The default nested group structure in Joomla and how to extend it
- Creating custom nested groups for granular permission control
- How permission inheritance works (parent to child, deny overrides allow)
- Setting permissions for custom content access per group
- Controlling module visibility per group using Access Levels
- Configuring component-level and category-level ACL
- Troubleshooting common ACL issues
Why It Matters
Most websites have more than one type of user. A business site may have visitors, registered members, content contributors, editors, and administrators. Each group needs different permissions. {{< ilink "Joomla" }}'s Access Control Level system is one of the most flexible in any CMS — far more granular than WordPress roles. You can control who can view, create, edit, publish, and delete content at the global, component, category, and even article level. Understanding how nested groups and permission inheritance work lets you design security models that match exactly what your organization needs.
Real-World Use
A university runs its intranet on {{< ilink "Joomla" }}. Departments include: Administration, Faculty, Students. Within Faculty, there are Professors and Teaching Assistants. Within Students, there are Undergraduates and Graduates. The nested group structure mirrors the university hierarchy. Each group has specific permissions: Professors can publish articles in their department; Teaching Assistants can edit but not publish; Students can only view. A custom Access Level called "Faculty Only" restricts the salary schedule module to faculty members only. The ACL system handles all of this without a single third-party extension.
Learning Path
flowchart LR A["Backups"] --> B["User Groups"] B --> C["Custom Fields"] C --> D["Joomla API"] D --> E["Database Maintenance"] classDef current fill:#38bdf8,color:#0f172a,stroke-width:2px class B current
Default Group Structure
Joomla ships with these default user groups:
Public
├── Guest
└── Registered
├── Author (can create own articles)
├── Editor (can edit any article)
├── Publisher (can publish articles)
├── Manager (backend access, limited)
├── Administrator (full backend access)
└── Super Users (full access, all permissions)
Each group inherits permissions from its parent. Registered inherits from Public. Author inherits from Registered. This inheritance chain is the foundation of Joomla's ACL.
Creating Custom Nested Groups
Scenario: Company Staff Structure
Let us create a custom group structure for a company:
Public
├── Guest
├── Registered
│ ├── Company Staff
│ │ ├── Marketing
│ │ │ ├── Marketing Writers
│ │ │ └── Marketing Managers
│ │ ├── Sales
│ │ │ ├── Sales Writers
│ │ │ └── Sales Managers
│ │ └── HR
│ └── ...
Step-by-Step
- Go to Users > Groups
- Click New to create each group:
| Group Name | Parent Group |
|---|---|
| Company Staff | Registered |
| Marketing | Company Staff |
| Marketing Writers | Marketing |
| Marketing Managers | Marketing |
| Sales | Company Staff |
| Sales Writers | Sales |
| Sales Managers | Sales |
Each group inherits permissions from its parent. Marketing Writers inherits from Marketing, which inherits from Company Staff, which inherits from Registered, which inherits from Public.
Permission Inheritance Rules
Understanding inheritance rules is critical. Here is the hierarchy:
- Child inherits parent permissions by default
- Deny overrides Allow at the same level
- Deny at any level cannot be overridden by Allow at a lower level
- Allow at a higher level can be overridden by Deny at a lower level
Inheritance Calculation
Effective Permission = (Inherited base) + (Direct Deny) + (Direct Allow)
Priority order:
1. Deny (highest priority)
2. Allow
3. Inherited (lowest priority)
Example
If Registered has "Create Article" set to Allowed:
- Company Staff (child of Registered) inherits Allowed
- Marketing (child of Company Staff) inherits Allowed
- If you set Marketing Writers to Denied, Marketing Writers cannot create articles
- If you set Marketing to Denied, all Marketing subgroups cannot create articles
Permissions for Custom Content Access
Let us configure a permission scheme for our company groups.
Article Permissions
- Go to Content > Articles > Options
- Click the Permissions tab
- Configure per group:
| Action | Marketing Writers | Marketing Managers | Sales Writers | HR |
|---|---|---|---|---|
| Create | Allowed | Allowed | Allowed | Allowed |
| Delete Own | Allowed | Allowed | Allowed | Allowed |
| Edit Own | Allowed | Allowed | Allowed | Allowed |
| Edit Any | Inherited | Allowed | Inherited | Inherited |
| Edit State | Inherited | Allowed | Inherited | Inherited |
| Publish | Inherited | Allowed | Inherited | Inherited |
Marketing Writers can create and edit their own articles but cannot publish them. Marketing Managers can create, edit, and publish any article in their department.
Module Visibility per Group
Modules can be restricted to specific user groups.
Creating an Access Level
- Go to Users > Access Levels
- Click New
- Name: "Marketing Only"
- Add these groups:
Public → (no — only marketing can see this)
Guest
Registered
Company Staff
Marketing ← included
Marketing Writers ← included (inherits from Marketing)
Marketing Managers ← included (inherits from Marketing)
Assigning a Module to the Access Level
- Edit any module (e.g., "Marketing Resources")
- In the Permissions tab module:
| Setting | Value |
|---|---|
| Access | Marketing Only |
Now only users in Marketing, Marketing Writers, or Marketing Managers see this module.
Component Access via ACL
You can restrict access to entire components.
- Go to Content > Articles > Options > Permissions
- Find your custom group (e.g., Marketing Writers)
- Set permissions:
| Action | Setting |
|---|---|
| Configure | Denied (cannot change options) |
| Access Component | Allowed (can see the component) |
| Create | Allowed |
| Delete | Allowed (own only) |
| Edit | Allowed (own only) |
| Edit State | Denied (cannot publish) |
| Edit Own | Allowed |
Category-Level Access
You can set different permissions per category. For example, the Marketing category might be editable only by the Marketing group.
- Go to Content > Categories
- Edit the Marketing category
- Click the Permissions tab
- Set:
| Group | Action | Setting |
|---|---|---|
| Marketing Writers | Edit Own | Allowed |
| Marketing Managers | Edit Any | Allowed |
| Sales | Edit Any | Denied |
Articles in the Marketing category can only be edited by Marketing group members, even though other groups can create articles globally.
Article-Level Access
Individual articles can override category and global permissions.
- Edit an article
- Click the Permissions tab
- Override specific actions:
| Action | Setting |
|---|---|
| Delete | Denied (even for authors, prevents accidental deletion) |
| Edit | Allowed (specific editors only) |
Article-level permissions give you the finest possible control. Use them sparingly — too many article-level overrides become hard to manage.
Troubleshooting ACL Issues
Checking Effective Permissions
- Go to Users > Users
- Edit the user you want to check
- Click the Assigned User Groups tab — shows all groups the user belongs to
- Click the Permissions tab
The Permissions tab shows the Calculated Settings for each action:
| Action | Calculated Setting | Explanation |
|---|---|---|
| Create | Allowed | Inherited from Registered |
| Edit Own | Allowed | Inherited from Marketing |
| Edit Any | Denied | Explicitly denied at Marketing Writers level |
| Publish | Denied | Inherited from Marketing Writers |
Common ACL Problems
User cannot see a module: Check the module's Access Level setting. If the module is set to "Special" and the user is in "Registered", they will not see it.
User can see content they should not: Check category-level permissions. A global Allow at the component level can be overridden by a Deny at the category level.
Permission changes do not take effect: Clear Joomla's cache. Permission calculations are cached.
Common Mistakes
Creating too many groups: More groups mean more complexity. Start with the minimum groups you need and add only when required by a specific use case.
Mixing up Allow and Deny: Remember that Deny overrides Allow. If a parent group has Allow but you set Deny on a child, the child cannot do that action. This trips up many beginners.
Forgetting module Access Level: You can configure article permissions perfectly, but if the module showing the articles has the wrong Access Level, users will not see the content. Check both.
Not testing with a test user: Create a test user and assign them to the group you are configuring. Log in as that user and verify permissions work as expected. Never assume a configuration is correct without testing.
Overriding at too many levels: Setting permissions at the global, component, category, and article levels creates a complex web of overrides. Favor simplicity — set permissions at the component or category level and use article-level overrides only for exceptions.
Practice Questions
How does permission inheritance work in Joomla user groups? Answer: Child groups inherit permissions from their parent groups. Deny has the highest priority and overrides Allow. Allow at a higher level can be overridden by Deny at a lower level. The effective permission equals inherited base plus direct deny plus direct allow, with deny taking priority.
How do you restrict a module to only show for specific user groups? Answer: Create a custom Access Level in Users > Access Levels that includes only the desired groups. Then edit the module and set its Access Level to the custom Access Level. Only users in the included groups will see the module.
What is the difference between component-level and category-level permissions? Answer: Component-level permissions apply globally to all content of that component. Category-level permissions apply only to articles within that specific category. Category-level overrides component-level. Use component-level for broad rules and category-level for specific restrictions.
Challenge: Design a complete ACL system for a fictional organization. Define the groups, their hierarchy, and their permissions. Create the groups in Joomla, configure component and category permissions, create Access Levels for module visibility, and create test users. Test every permission scenario and document the results. The organization should have at least 5 groups and 3 content categories with different access rules.
FAQ
Mini Project
Your task is to build a complete ACL system for a fictional company.
Create the following organization structure in Joomla:
Company Staff (parent: Registered)
- Departments: Engineering, Marketing, Sales, HR
- Within Engineering: Engineers, Engineering Managers
- Within Marketing: Content Writers, Marketing Managers
Configure global article permissions:
- Company Staff: Create, Edit Own = Allowed
- Content Writers: Edit Any, Edit State = Allowed
- Marketing Managers: Publish = Allowed
- Engineering Managers: Edit Any, Publish = Allowed
Create three categories (Blog, Products, Internal) with different permissions
Create Access Levels:
- Internal Only (HR, Engineering Managers, Marketing Managers)
- Everyone (all groups)
Create modules visible only to specific Access Levels
Create 5 test users (one per group)
Log in as each user and verify permissions work correctly
Document your ACL design and test results
What's Next
Now that you understand user groups, learn about custom fields:
Continue to Lesson 37: Joomla Custom Fields — Adding and managing custom content fields.
Related lessons:
- {{< ilink "Joomla" "Joomla Backups" }} — Backup your ACL configuration
- {{< ilink "Joomla" "Joomla Multilingual Sites" }} — User permissions in multilingual context
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro