Skip to content

egerstudios/tenant-modules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tenant Modules for Laravel

A Laravel package that provides multi-tenant module management capabilities, allowing you to create, enable, disable, and manage modules per tenant in your Laravel application.

Installation

  1. Install the package via Composer:
composer require egerstudios/tenant-modules
  1. Publish the configuration and migrations:
php artisan vendor:publish --provider="Egerstudios\TenantModules\TenantModulesServiceProvider"
  1. Run the migrations:
php artisan migrate

Configuration

The package configuration is published to config/tenant-modules.php. Here are the main configuration options:

return [
    'path' => 'modules', // Base path for modules
    'namespace' => 'Modules', // Base namespace for modules
    'provider' => 'Providers\\ModuleServiceProvider', // Default service provider name
    'middleware' => [
        'enabled' => true, // Enable/disable middleware
        'prefix' => 'module', // URL prefix for module routes
    ],
];

Module Structure

Each module follows this structure:

modules/
└── ModuleName/
    ├── config/
    │   ├── module.php
    │   └── navigation.yaml
    ├── database/
    │   └── migrations/
    ├── resources/
    │   ├── views/
    │   └── lang/
    ├── routes/
    │   └── web.php
    ├── src/
    │   ├── Controllers/
    │   ├── Models/
    │   └── Services/
    └── composer.json

Module Configuration

Each module requires a config/module.php file:

return [
    'name' => 'ModuleName',
    'enabled' => true,
    'description' => 'Module description',
    'version' => '1.0.0',
];

Navigation Configuration

Modules can define their navigation in config/navigation.yaml:

items:
  - label: Module Name
    icon: module
    route: module.index
    permission: module.view
    children:
      - label: Sub Item
        route: module.sub
        permission: module.view

Available Commands

Create a New Module

php artisan module:make ModuleName

Options:

  • --description: Module description
  • --version: Module version
  • --force: Overwrite existing module

List Modules

php artisan module:list

Enable a Module

php artisan module:enable ModuleName

Options:

  • --tenant: Specific tenant ID
  • --all-tenants: Enable for all tenants

Disable a Module

php artisan module:disable ModuleName

Options:

  • --tenant: Specific tenant ID
  • --all-tenants: Disable for all tenants

Delete a Module

php artisan module:delete ModuleName

Options:

  • --force: Force deletion without confirmation

Build Module Assets

php artisan module:build ModuleName

Helper Functions

The package provides several helper functions:

Module Path

module_path('ModuleName', 'path/to/file');

Module Namespace

module_namespace('ModuleName', 'Path\\To\\Class');

Module Service Provider

module_provider('ModuleName');

Check Module Status

module_enabled('ModuleName');
module_disabled('ModuleName');

Get Module Information

modules(); // Get all modules
modules('ModuleName'); // Get specific module info

Middleware

The package includes a middleware to protect module routes:

Route::middleware(['web', 'auth', 'module:ModuleName'])->group(function () {
    // Module routes
});

Events

The package fires several events:

  • ModuleEnabled: When a module is enabled
  • ModuleDisabled: When a module is disabled
  • ModuleDeleted: When a module is deleted

Best Practices

  1. Always use the helper functions to reference module paths and namespaces
  2. Keep module-specific code within the module directory
  3. Use the navigation configuration for consistent UI
  4. Implement proper permissions for module access
  5. Use the middleware to protect module routes

Contributing

Please see CONTRIBUTING.md for details.

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors