Skip to content

Joomla User Groups Deep Dive — Nested Groups, Inheritance and Custom Access

DodaTech Updated 2026-06-27 11 min read

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

  1. Go to Users > Groups
  2. 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:

  1. Child inherits parent permissions by default
  2. Deny overrides Allow at the same level
  3. Deny at any level cannot be overridden by Allow at a lower level
  4. 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

  1. Go to Content > Articles > Options
  2. Click the Permissions tab
  3. 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

  1. Go to Users > Access Levels
  2. Click New
  3. Name: "Marketing Only"
  4. 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

  1. Edit any module (e.g., "Marketing Resources")
  2. 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.

  1. Go to Content > Articles > Options > Permissions
  2. Find your custom group (e.g., Marketing Writers)
  3. 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.

  1. Go to Content > Categories
  2. Edit the Marketing category
  3. Click the Permissions tab
  4. 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.

  1. Edit an article
  2. Click the Permissions tab
  3. 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

  1. Go to Users > Users
  2. Edit the user you want to check
  3. Click the Assigned User Groups tab — shows all groups the user belongs to
  4. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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

What is the difference between user groups and access levels in Joomla?

User groups are collections of users (like Registered, Author, Editor). Access Levels control who can see what content and modules. Access Levels group together user groups for viewing purposes. Users must belong to a group that is included in an Access Level to see the content assigned to that level.

How do I create custom user groups in Joomla?

Go to Users > Groups, click New, enter a name, and select a parent group. The new group inherits all permissions from its parent. You can then customize permissions at the component, category, or module level.

Can I set permissions at the article level?

Yes. Edit any article and click the Permissions tab. You can override specific actions (Delete, Edit, Edit State, Publish) for specific user groups at the individual article level.

Why can my test user not see the module I assigned?

Check the module's Access Level setting. If the module is assigned to the 'Special' access level but your test user belongs to 'Registered', they will not see it. Create a custom Access Level that includes your test user's group.

How do I check what permissions a user actually has?

Edit the user in Users > Users, click the Assigned User Groups tab to see their groups, then click the Permissions tab to see the calculated effective permissions for each action.

Mini Project

Your task is to build a complete ACL system for a fictional company.

Create the following organization structure in Joomla:

  1. Company Staff (parent: Registered)

    • Departments: Engineering, Marketing, Sales, HR
    • Within Engineering: Engineers, Engineering Managers
    • Within Marketing: Content Writers, Marketing Managers
  2. 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
  3. Create three categories (Blog, Products, Internal) with different permissions

  4. Create Access Levels:

    • Internal Only (HR, Engineering Managers, Marketing Managers)
    • Everyone (all groups)
  5. Create modules visible only to specific Access Levels

  6. Create 5 test users (one per group)

  7. Log in as each user and verify permissions work correctly

  8. 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