Role and permission management for Laravel using Taxon.
Permixion provides a Spatie-like API for managing roles and permissions, powered by the flexible Taxon tagging system.
- 🎭 Familiar API - Drop-in replacement for Spatie Laravel Permission
- 🏷️ Taxon-powered - All data stored via Taxon's tag system
- 🏢 Team/Context Scoping - First-class support for multi-tenant permissions
- ⚡ Performance - Built-in caching for role-permission lookups
- 🔍 Wildcard Permissions -
posts.*matchesposts.create,posts.edit, etc. - 🛡️ Laravel Gate Integration - Works seamlessly with Laravel's authorization
- 🎨 Blade Directives -
@role,@permission,@hasanyrole, etc. - 🚦 Middleware - Protect routes with role/permission checks
composer require robinsonryan/permixionPublish the configuration:
php artisan vendor:publish --tag=permixion-configuse RobinsonRyan\Permixion\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}use RobinsonRyan\Permixion\Facades\Permixion;
// Create roles
Permixion::createRole('admin');
Permixion::createRole('editor', ['posts.create', 'posts.edit']);
// Create permissions
Permixion::createPermission('posts.delete');
Permixion::createPermission('users.manage');
// Assign permissions to roles
$adminRole = Permixion::findRole('admin');
$adminRole->givePermissionTo(['posts.delete', 'users.manage']);$user = User::find(1);
// Assign a role
$user->assignRole('editor');
// Assign multiple roles
$user->assignRole(['editor', 'moderator']);
// Remove a role
$user->removeRole('editor');
// Sync roles
$user->syncRoles(['admin']);// Check if user has a role
if ($user->hasRole('admin')) {
//
}
// Check if user has any of the roles
if ($user->hasAnyRole(['admin', 'editor'])) {
//
}
// Check if user has a permission
if ($user->hasPermissionTo('posts.delete')) {
//
}
// Check via Laravel Gate
if ($user->can('posts.delete')) {
//
}$team = Team::find(1);
// Assign role within a team context
$user->assignRole('admin', $team);
// Check role within team context
if ($user->hasRole('admin', $team)) {
//
}
// Check permission within team context
if ($user->hasPermissionTo('posts.delete', $team)) {
//
}@role('admin')
<p>You are an admin!</p>
@endrole
@permission('posts.create')
<a href="{{ route('posts.create') }}">Create Post</a>
@endpermission
@hasanyrole(['admin', 'editor'])
<p>You have editorial access</p>
@endhasanyroleRoute::middleware(['role:admin'])->group(function () {
//
});
Route::middleware(['permission:posts.delete'])->group(function () {
//
});
Route::middleware(['role_or_permission:admin|posts.delete'])->group(function () {
//
});See the docs directory for detailed documentation:
- PHP 8.2+
- Laravel 11.x or 12.x
- robinsonryan/taxon ^1.1
MIT License. See LICENSE.md for details.