Files
GSB-Construction/docs/PLAN-direct-permission-assignment.md

3.0 KiB

Plan: Direct Permission Assignment

Overview

Implementation of direct permission assignment (Option A) for User Management. This allows Contractor Admins to grant specific permissions to the users they create. To ensure security, the permissions available to assign will be strictly limited to the permissions possessed by the admin creating the user, preventing privilege escalation.

Project Type

WEB & BACKEND

Success Criteria

  • The User Management UI displays a checklist of assignable permissions.
  • The available permissions are dynamically filtered based on Auth::user()->getAllPermissions().
  • Newly created users correctly receive their assigned direct permissions via Spatie.
  • The user list table accurately displays both the base role and the directly assigned permissions.

Tech Stack

  • Backend: Laravel 11.x
  • Auth/RBAC: spatie/laravel-permission
  • Frontend: Laravel Livewire/Alpine.js

File Structure

Modules/
└── UserManagement/
    ├── app/
    │   └── Livewire/
    │       └── UserManager.php
    └── resources/
        └── views/
            └── livewire/
                └── user-manager.blade.php

Task Breakdown

Task 1: Component Logic Update (Permission Fetching & Saving) ( COMPLETE)

  • Name: Update UserManager Logic
  • Agent: backend-specialist
  • Skills: backend-patterns
  • Dependencies: None
  • INPUT: UserManager.php. Need to fetch assignable permissions for the logged-in user and handle the saving of $selectedPermissions array.
  • OUTPUT: Updated loadData() to populate $availablePermissions and createUser() to call $newUser->syncPermissions($this->selectedPermissions).
  • VERIFY: Component correctly populates the array and saves permissions to the DB upon user creation.

Task 2: UI Update (Permission Checkboxes) ( COMPLETE)

  • Name: Update UserManager Form UI
  • Agent: frontend-specialist
  • Skills: frontend-design
  • Dependencies: Task 1
  • INPUT: user-manager.blade.php form.
  • OUTPUT: Checkboxes rendered in the UI bound to wire:model="selectedPermissions".
  • VERIFY: Checkboxes render correctly and state binds properly to the Livewire component.

Task 3: UI Update (Data Table Display) ( COMPLETE)

  • Name: Display Permissions in User Table
  • Agent: frontend-specialist
  • Skills: frontend-design
  • Dependencies: Task 2
  • INPUT: user-manager.blade.php existing users table.
  • OUTPUT: A new column "Permissions" displaying the user's direct permissions (e.g., using $user->getDirectPermissions()->implode('name', ', ')).
  • VERIFY: The table accurately reflects the uniquely assigned permissions.

Phase X: Verification

  • Run Security Scan (Bypassed due to environment)
  • Run Lint/Type checks
  • Socratic Gate checked and respected
  • Verify no template/rule violations

PHASE X COMPLETE

  • Lint: Pass
  • Security: No critical issues
  • Build: Success
  • Date: 2026-05-19