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

Group Security Bundle Laravel Package

midnightluke/group-security-bundle

Symfony bundle for managing group-based security: define user groups, assign roles/permissions, and integrate authorization into your app. Provides services/configuration to simplify access control around group membership.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require midnightluke/group-security-bundle
    

    Add to config/app.php under providers:

    MidnightLuke\GroupSecurityBundle\GroupSecurityBundle::class,
    

    Publish config (optional):

    php artisan vendor:publish --provider="MidnightLuke\GroupSecurityBundle\GroupSecurityBundle" --tag="config"
    
  2. First Use Case

    • Define a group in config/group_security.php:
      'groups' => [
          'admin' => [
              'roles' => ['ROLE_ADMIN'],
              'permissions' => ['create_user', 'delete_user'],
          ],
      ],
      
    • Use in a controller:
      use MidnightLuke\GroupSecurityBundle\Security\GroupSecurity;
      
      public function index(GroupSecurity $groupSecurity)
      {
          if ($groupSecurity->hasGroup('admin')) {
              return view('admin.dashboard');
          }
          abort(403);
      }
      

Implementation Patterns

Role-Based Workflows

  • Group Assignment Assign groups to users via middleware or event listeners:

    // Example: Assign 'editor' group after registration
    public function registered(UserRegistered $event)
    {
        $event->user->groups()->attach('editor');
    }
    
  • Permission Checks Use GroupSecurity service in controllers/services:

    if ($groupSecurity->hasPermission('delete_user')) {
        $user->delete();
    }
    

Integration with Laravel Features

  • Policy Integration Extend existing policies:

    public function delete(User $user, User $model)
    {
        return $user->hasPermission('delete_user');
    }
    
  • Middleware Protect routes:

    Route::get('/admin', function () {
        // ...
    })->middleware('group:admin');
    
  • API Gate (Lumen/SPA)

    $this->gate->define('edit-post', function ($user) {
        return $user->hasPermission('edit_post');
    });
    

Dynamic Group Management

  • Runtime Group Assignment

    $groupSecurity->assignGroupToUser($userId, 'moderator', 30); // TTL in minutes
    
  • Group-Based Data Filtering

    $posts = Post::whereHas('author.groups', function ($query) {
        $query->where('name', 'editor');
    })->get();
    

Gotchas and Tips

Common Pitfalls

  • Caching Issues Clear config cache after modifying group_security.php:

    php artisan config:clear
    

    Groups are cached by default for performance.

  • Case Sensitivity Group names/permissions are case-sensitive unless configured otherwise.

  • Database Schema Ensure groups and group_user tables exist (migrations are not auto-published). Use:

    php artisan vendor:publish --provider="MidnightLuke\GroupSecurityBundle\GroupSecurityBundle" --tag="migrations"
    

Debugging Tips

  • Log Group Assignments Enable debug mode in config:

    'debug' => env('GROUP_SECURITY_DEBUG', false),
    

    Logs will appear in storage/logs/laravel.log.

  • Check User Groups

    $user->groups; // Collection of assigned groups
    $groupSecurity->getUserGroups($userId);
    

Extension Points

  • Custom Storage Override storage engine via config:

    'storage' => [
        'driver' => 'database', // or 'cache', 'redis'
    ],
    
  • Event Listeners Extend group logic via events:

    // Example: Revoke permissions on group removal
    public function handle(GroupRemoved $event)
    {
        // Custom logic
    }
    
  • Custom Permission Logic Override PermissionChecker:

    $groupSecurity->setPermissionChecker(new CustomPermissionChecker());
    
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