Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Permission Laravel Package

spatie/laravel-permission

Database-backed roles and permissions for Laravel. Assign roles and permissions to users, sync them to the Gate, and check abilities with Laravel’s built-in can()/authorize features. Includes migrations, caching, teams, and flexible model setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Role-Based Access Control (RBAC) Alignment: The package provides a mature, Laravel-native RBAC implementation that integrates seamlessly with Laravel’s built-in authorization system (Gates/Policies). This aligns well with monolithic Laravel applications requiring fine-grained access control (e.g., SaaS platforms, admin panels, or multi-tenant systems).
  • Extensibility: Supports custom models (e.g., Role, Permission, User) via traits (HasRoles, HasPermissions), enabling domain-specific adaptations (e.g., team-based permissions, hierarchical roles).
  • Event-Driven Design: Emits events (e.g., RoleAssigned, PermissionRevoked) for reactive workflows (e.g., logging, notifications, or caching invalidation).
  • Wildcard Permissions: Supports pattern-based permissions (e.g., edit-*), reducing boilerplate for CRUD-like operations.

Integration Feasibility

  • Laravel 12+ Compatibility: Officially supports Laravel 12–13, with backward compatibility for older versions (via 6.x branch). Low risk for new Laravel projects.
  • Database Agnostic: Uses Eloquent models and migrations, requiring minimal schema changes. Supports PostgreSQL, MySQL, SQLite.
  • Middleware Integration: Provides RoleOrPermissionMiddleware for route-level access control, reducing custom policy boilerplate.
  • Passport/OAuth2: Works with Laravel Passport for API token-based permission checks.

Technical Risk

Risk Area Severity Mitigation
Migration Complexity Medium Requires database migrations for roles, permissions, and pivot tables. Use spatie/laravel-permission:migrate Artisan command.
Performance at Scale Low Optimized for N+1 queries (e.g., loadMissingPermissions). Cache permissions with spatie/laravel-caching.
Concurrency Issues Low Fixed TOCTOU race conditions in v6.22.0 for Octane/Horizon environments.
Version Lock-in Low MIT license + backward-compatible upgrades. Avoid major version jumps (e.g., 6.x → 7.x) without testing.
Custom Logic Overhead Medium Extend traits (e.g., HasRoles) or override methods (e.g., syncPermissions). Document customizations.

Key Questions for TPM

  1. Use Case Clarity:
    • Are permissions static (e.g., admin vs. user) or dynamic (e.g., role-based workflows like "approve-invoices")?
    • Do you need team-based permissions (requires spatie/laravel-team integration)?
  2. Performance Requirements:
    • Will the system handle >10K users/roles? If yes, benchmark loadMissingPermissions and consider caching.
  3. Auditability:
    • Do you need permission change logs? Extend with spatie/laravel-activitylog or custom observers.
  4. Legacy System Integration:
    • Are existing custom policies or ACL tables in use? Assess migration effort vs. hybrid approach.
  5. DevOps Impact:
    • Will database migrations require downtime? Use zero-downtime migration strategies (e.g., Laravel Forge/Envoyer).

Integration Approach

Stack Fit

  • Laravel Ecosystem: Native support for Laravel’s authorization system, Passport, and Horizon (for queue-based permission syncs).
  • Frontend Agnostic: Works with Livewire, Inertia.js, or API-driven UIs. Provides Blade directives (e.g., @can) and API responses (e.g., user()->getAllPermissions()).
  • Testing: Pest/PHPUnit-ready with mocking helpers for HasRoles/HasPermissions traits.

Migration Path

Step Action Tools/Commands
1. Pre-Integration Review existing auth logic (policies, gates). Identify conflicts or redundant permissions. php artisan make:policy (if needed)
2. Installation Add package via Composer and publish config/migrations. composer require spatie/laravel-permission
Run migrations. php artisan migrate
3. Model Setup Apply HasRoles/HasPermissions traits to User model. php artisan make:model Role -m
4. Seed Initial Permissions Create roles/permissions via seeder or Tinker. php artisan tinker
5. Middleware Integration Protect routes with RoleOrPermissionMiddleware. Route::middleware(['role:admin'])->group(...)
6. Frontend Integration Use @can Blade directives or API checks (user()->can('permission')). Custom JS logic (e.g., axios.get('/user/permissions'))
7. Testing Write unit/feature tests for permission logic. Pest/PHPUnit

Compatibility

  • Laravel Versions: Officially supports 12–13. For Laravel 11, use 6.x branch.
  • PHP Versions: 8.3–8.5 (v7.x). Downgrade to 6.x for PHP 8.2.
  • Database: Works with MySQL, PostgreSQL, SQLite. Avoid SQL Server (no official support).
  • Caching: Integrates with Redis/Memcached for permission caching (configure in .env).

Sequencing

  1. Phase 1 (Core Setup):
    • Install package, run migrations, seed initial roles/permissions.
    • Risk: Minimal. Use spatie/laravel-permission:install Artisan command for guided setup.
  2. Phase 2 (Model Integration):
    • Apply traits to User and custom models (e.g., Team).
    • Risk: Medium. Test HasRoles/HasPermissions methods thoroughly.
  3. Phase 3 (Route Protection):
    • Replace custom middleware with RoleOrPermissionMiddleware.
    • Risk: Low. Middleware is battle-tested.
  4. Phase 4 (Frontend/UI):
    • Update Blade templates/API responses to reflect permission changes.
    • Risk: Low. Uses standard Laravel conventions.
  5. Phase 5 (Optimization):
    • Enable caching (PERMISSION_CACHE_ENABLED=true).
    • Risk: Low. Configurable via .env.

Operational Impact

Maintenance

  • Dependency Updates: Follow Spatie’s release cycle (quarterly major updates). Monitor GitHub Releases.
  • Customization Overhead:
    • Low: For basic RBAC.
    • Medium: For advanced features (e.g., team permissions, wildcard overrides).
  • Debugging:
    • Use spatie/laravel-permission:debug Artisan command to inspect user roles/permissions.
    • Log permission checks with Gate::inspect().

Support

  • Community: 12.9K stars, active GitHub issues (response time: <48h for critical bugs).
  • Documentation: Comprehensive docs with troubleshooting guides.
  • Enterprise Support: Paid support via Spatie.

Scaling

  • Performance Bottlenecks:
    • N+1 Queries: Mitigate with loadMissingPermissions() or caching.
    • Wildcard Permissions: Can slow down checks if overused. Audit with spatie/laravel-permission:debug.
  • Horizontal Scaling:
    • Stateless: Permissions are user-centric (no shared state).
    • Caching: Cache permissions in Redis for distributed setups.
  • Database Load:
    • Indexing: Ensure model_id and permission_name columns are indexed.
    • Batch Operations: Use syncRoles()/syncPermissions() for bulk updates.

Failure Modes

Failure Scenario Impact Mitigation
Migration Failure Downtime if not zero-downtime. Use Laravel Forge/Envoyer for blue-green deployments.
Permission Cache Stale Users see outdated permissions. Set PERMISSION_CACHE_TTL to
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope
anil/file-picker
broqit/fields-ai