# Plan: Store and Product Management Refactoring (RBAC Hardening)

This plan outlines the implementation of stricter role-based access control (RBAC) for Store and Product management, following the "Big 3" hierarchy and supporting multiple store managers.

## 🏗️ Technical Approach

### 1. Data Architecture: Multiple Store Managers
- **New Table**: `store_managers`
    - `id` (INT)
    - `hashkey` (VARCHAR 300, unique)
    - `store_id` (INT, foreign key to `str`)
    - `user_id` (INT, foreign key to `users`)
    - `created_by` (INT)
    - `updated_by` (INT)
    - `is_active` (BOOLEAN, default true)
    - `created_at`, `updated_at`
- **Model**: `App\Models\Market\StoreManager`
- **Relationship**: `Store` hasMany `StoreManager` (and `belongsToMany` via `users`).

### 2. RBAC: The "Big 3"
- **Definition**: `ULTIMATE`, `SUPER_OPERATOR`, `OPERATOR`.
- **Global Access**: The Big 3 can list, view, and manage ANY store.
- **Hierarchy Access**: Other roles (e.g., Coordinator, Supplier Overseer) can only list or manage stores where they are a direct or indirect parent of the Store Owner OR any of the Store Managers.
- **Global Product Editing**: Restrict `ModifyAllProducts` action to only the Big 3.

### 3. Controller Refactoring
- **StoreController**:
    - `listStores_Admin`: Implement strict hierarchy-based filtering for non-Big 3 users.
    - `update`: Enforce hierarchy-based check to prevent unauthorized modifications.
    - `viewStoreDetails`: Ensure correct "can_edit" flag based on hierarchy.
- **ProductController**:
    - `editProductAdmin`: Change global edit logic - allow ONLY Big 3 to edit global product fields. Remove the "creator can edit globally" for non-Big 3 if they don't have the permission.
    - `AssignProductToOwnStore`: Update to include check for multiple managers.

## 🛠️ Components to Update

### Backend
- `app/Http/Controllers/Market/StoreController.php`
- `app/Http/Controllers/Market/ProductController.php`
- `app/Http/Controllers/Helpers/Permissions/ProductPermissions.php`
- `app/Http/Controllers/Helpers/Permissions/UserPermissions.php`
- `app/Models/Market/Store.php`
- `app/Models/Market/StoreManager.php` (New)

### Frontend
- `resources/js/Pages/CreateStore.vue`: Add multi-manager selection.
- `resources/js/Pages/EditStore.vue`: Update management UI.
- `resources/js/Pages/ManageProductAdmin.vue`: Enforce global edit restrictions in the UI.

## 📅 Phases

1. **Phase 1: Database and Models** (Migration and StoreManager model).
2. **Phase 2: RBAC Logic Hardening** (Update Permissions helpers).
3. **Phase 3: Store Management Refactoring** (Hierarchy-based filtering).
4. **Phase 4: Product Management Refactoring** (Global edit restrictions).
5. **Phase 5: UI Integration** (Multi-manager picker and permission guards).
