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

Horus Laravel Package

hans-thomas/horus

Horus streamlines roles and permissions in Laravel with Spatie Laravel Permission integration. Batch-create roles/permissions, generate model permissions from policies, and assign permissions to roles quickly. Works with Laravel 10–12 and is supported by Sphinx.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Extensibility: Horus builds on spatie/laravel-permission, a battle-tested package, making it a natural fit for Laravel applications requiring RBAC (Role-Based Access Control). The package abstracts permission/role management, reducing boilerplate while maintaining flexibility.
  • Policy Integration: Seamlessly integrates with Laravel’s native Policy classes, enabling model-specific permissions (e.g., PostPolicy::update). This aligns with Laravel’s authorization ecosystem (e.g., Gate, Policy).
  • Batch Operations: Supports bulk role/permission creation, reducing manual setup for large-scale applications (e.g., SaaS platforms with multi-tenancy).

Integration Feasibility

  • Laravel Version Compatibility: Explicitly supports Laravel 10.x, 11.x, and 12.x, ensuring compatibility with modern Laravel stacks. However, Laravel 13+ support is untested (risk: minor breaking changes if adopted).
  • Dependency Alignment: Relies on spatie/laravel-permission (v5.x+), which is widely adopted. No conflicting dependencies or version constraints with other auth packages (e.g., Sanctum, Passport).
  • Database Schema: Assumes standard spatie/laravel-permission tables (roles, permissions, model_has_permissions, etc.). No schema migrations are required if the base package is already installed.

Technical Risk

  • Limited Adoption: Only 2 GitHub stars and 0 dependents suggest niche use or recent release. Risk of undocumented edge cases or lack of community support.
  • Documentation Gaps: While a README and Sphinx-backed docs exist, real-world examples (e.g., multi-role hierarchies, dynamic permissions) are sparse. Risk of misconfiguration in complex scenarios.
  • Testing Coverage: No visible test suite in the repo (only Codecov badge). Risk of untested edge cases (e.g., concurrent role assignments, permission caching).
  • Sphinx Dependency: Requires hans-thomas/sphinx for advanced features (e.g., permission generation from policies). Adds complexity if Sphinx isn’t already in the stack.

Key Questions

  1. Use Case Alignment:
    • Does the team need batch role/permission management (e.g., admin dashboards) or is spatie/laravel-permission sufficient?
    • Are policy-based permissions (e.g., PostPolicy::delete) a priority, or is fine-grained RBAC enough?
  2. Migration Path:
    • Is spatie/laravel-permission already in use? If not, what’s the effort to adopt it alongside Horus?
    • Will existing role/permission data need migration?
  3. Long-Term Viability:
    • Is the maintainer (hans-thomas) active? (Check GitHub activity, issue responses.)
    • Are there plans for Laravel 13+ support?
  4. Performance:
    • How does Horus handle large-scale permission assignments (e.g., 10K+ roles)? Are there caching strategies?
  5. Security:
    • Are there safeguards against permission escalation (e.g., mass-assignment vulnerabilities)?
    • How are permission caches invalidated (e.g., after role updates)?

Integration Approach

Stack Fit

  • Ideal For:
    • Laravel applications requiring RBAC with policy integration (e.g., admin panels, SaaS platforms).
    • Teams using spatie/laravel-permission but needing simplified bulk operations.
    • Projects where developer experience (DX) for permission management is critical.
  • Less Ideal For:
    • Simple projects where manual role/permission setup is acceptable.
    • Applications using alternative auth systems (e.g., Casbin, Entrust).
    • High-performance systems where permission checks are a bottleneck (Horus adds abstraction layers).

Migration Path

  1. Prerequisite: Install spatie/laravel-permission (if not already present):
    composer require spatie/laravel-permission
    php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
    php artisan migrate
    
  2. Install Horus:
    composer require hans-thomas/horus
    php artisan vendor:publish --tag=horus-config
    
  3. Configuration:
    • Publish Horus config (config/horus.php) and update as needed (e.g., default roles).
    • Configure Sphinx (if using policy-based permissions):
      // config/horus.php
      'sphinx' => [
          'enabled' => true,
          'policy_namespace' => 'App\\Policies',
      ],
      
  4. Seed Initial Data:
    • Use Horus’ batch creation to populate roles/permissions:
      use HansThomas\Horus\Facades\Horus;
      
      Horus::roles(['admin', 'editor', 'user'])
           ->permissions(['create_post', 'edit_post', 'delete_post'])
           ->assignToRoles(['admin' => ['create_post', 'edit_post', 'delete_post']]);
      
  5. Policy Integration (Optional):
    • Generate permissions from policies using Sphinx:
      php artisan horus:sphinx:generate
      

Compatibility

  • Laravel Ecosystem:
    • Works with Laravel Breeze/Jetstream (for auth scaffolding).
    • Compatible with Sanctum/Passport (for API auth).
    • Integrates with Laravel Gates for dynamic permissions.
  • Third-Party Packages:
    • No known conflicts with popular packages (e.g., laravel-nova, filamentphp/filament).
    • May require customization for non-standard permission storage (e.g., Redis).

Sequencing

  1. Phase 1: Install and configure Horus alongside spatie/laravel-permission.
  2. Phase 2: Migrate existing roles/permissions (if any) to Horus’ format.
  3. Phase 3: Implement policy-based permissions (if using Sphinx).
  4. Phase 4: Update frontend/backend to use Horus’ helpers (e.g., Horus::checkPermission()).
  5. Phase 5: Test edge cases (e.g., role inheritance, permission caching).

Operational Impact

Maintenance

  • Pros:
    • Reduced Boilerplate: Horus automates role/permission CRUD, lowering maintenance overhead.
    • Centralized Management: Configurable via config/horus.php, making changes deployable without code updates.
  • Cons:
    • Dependency Risk: Relies on spatie/laravel-permission and Sphinx. Updates to these may require Horus adjustments.
    • Debugging Complexity: Stack traces may involve Horus + Spatie + Laravel layers, increasing troubleshooting time.

Support

  • Documentation: Basic but functional. Sphinx docs are a plus for policy integration.
  • Community: Limited activity (2 stars, no dependents). Support may require:
    • GitHub issues for bugs.
    • Custom PRs for missing features.
  • Error Handling: Minimal public examples of error cases (e.g., duplicate permissions, circular role dependencies).

Scaling

  • Performance:
    • Permission Checks: Uses Spatie’s optimized queries. Caching (e.g., permission.cache in Spatie) should be enabled.
    • Batch Operations: Efficient for bulk inserts but test with large datasets (e.g., 10K+ roles).
  • Database Load:
    • Standard Spatie tables. No additional queries for basic operations.
    • Potential Bottleneck: Policy-based permission generation (Sphinx) may add overhead during deployment.
  • Horizontal Scaling: Stateless operations (e.g., permission checks) scale well. Caching (Redis) recommended for high-traffic apps.

Failure Modes

Scenario Impact Mitigation
Horus/Spatie Update Breaking changes in APIs. Test updates in staging; use feature flags.
Database Corruption Permission data loss. Regular backups; use Spatie’s migrations.
Circular Role Dependencies Infinite loops in permission checks. Validate role hierarchies during batch creation.
Sphinx Misconfiguration Policy permissions not generated. Manual fallback to Spatie’s direct methods.
Cache Invalidation Stale permissions after updates. Configure Spatie’s cache tags properly.

Ramp-Up

  • Developer Onboarding:
    • Time Estimate: 2–4 hours to understand Horus + Spatie integration.
    • Key Concepts:
      • Role/permission lifecycle (creation, assignment, revocation).
      • Policy-based permissions (Sphinx).
      • Batch operations vs. manual management.
    • Tools Needed:
      • Laravel IDE helpers (e.g., PHPStorm) for autocompletion.
      • `t
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.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky