---
tags: [companyuser, model]
module: CompanyUser
---

# RoleAndPermission

## Connections
[[_CompanyUser]] · [[[Model]User]] · [[[Controller]RolesController]] · [[[Service]RoleServices]] · [[[Repo]Repositories]] · [[[DB]DatabaseTables]]

## Source
```
Modules/CompanyUser/Models/Role.php
Modules/CompanyUser/Models/Permission.php
```

## Responsibilities
- Extends Spatie Permission's `Role` and `Permission` models with tenant-awareness and auditing
- Every route is gated by `permission:permissions.*` middleware
- Roles are assigned to [[[Model]User]] via `HasRoles` trait
- Permissions are assigned to Roles in many-to-many

## Key Details

| Model | Extends | Guard |
|---|---|---|
| Role | `Spatie\Permission\Models\Role` | web |
| Permission | `Spatie\Permission\Models\Permission` | web |

## Traits
`AuditableTrait` · `UsesTenantConnection` (both)

## Permission Naming Convention
`{module}.{resource}.{action}` — e.g. `permissions.users.view`, `accounting.chart-of-accounts.create`

## Enums
[[[Enum]Enums#RolesEnum]] — `owner` role is the primary tenant owner (protected from deletion)
