mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-17 12:16:56 +02:00
Make sure directors and managers see correct store data
Fixes an issue where directors and managers might see data from multiple stores incorrectly. Ensures roles with limited store access only view their designated information and prompts explicit store selection when no store is chosen. Updates the UI to correctly display store selectors based on user roles. Also adds cache invalidation for user data upon authentication updates and refines API filtering for orders and deliveries to respect user roles and store selections. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 15f19c36-9aac-46a4-a181-3dc5f496fabd Replit-Commit-Checkpoint-Type: full_checkpoint
This commit is contained in:
1 parent
c1b5d66f1e
commit
46de48f459
4 files changed
+135
-26
No files matched your search
@@ -82,10 +82,20 @@ export default function Layout({ children }: LayoutProps) {
|
||||
}
|
||||
}
|
||||
|
||||
// IMPORTANT FIX: Pour les rôles directeur/manager, forcer la sélection d'un magasin spécifique
|
||||
// si aucun n'est sélectionné et qu'ils n'ont accès qu'à un seul magasin
|
||||
if ((user.role === 'directeur' || user.role === 'manager') && !selectedStoreId && stores.length === 1) {
|
||||
console.log('🏪 Auto-selecting single available store for directeur/manager:', stores[0].id);
|
||||
const singleStoreId = stores[0].id;
|
||||
setSelectedStoreId(singleStoreId);
|
||||
localStorage.setItem('selectedStoreId', singleStoreId.toString());
|
||||
}
|
||||
|
||||
console.log('🏪 Store initialization complete:', {
|
||||
user: user.role,
|
||||
selectedStoreId,
|
||||
storesCount: stores.length
|
||||
storesCount: stores.length,
|
||||
autoSelected: (user.role === 'directeur' || user.role === 'manager') && !selectedStoreId && stores.length === 1
|
||||
});
|
||||
setStoreInitialized(true);
|
||||
}
|
||||
@@ -131,14 +141,18 @@ export default function Layout({ children }: LayoutProps) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Store selector for admin - responsive */}
|
||||
{user?.role === 'admin' && stores.length > 0 && (
|
||||
{/* Store selector for admin, directeur, and manager - responsive */}
|
||||
{user && (user.role === 'admin' || user.role === 'directeur' || user.role === 'manager') && stores.length > 0 && (
|
||||
<div className="flex items-center gap-2">
|
||||
<Store className="h-4 w-4 text-gray-500 hidden sm:block" />
|
||||
<Select
|
||||
value={selectedStoreId?.toString() || "all"}
|
||||
value={selectedStoreId?.toString() || (user.role === 'admin' ? "all" : "")}
|
||||
onValueChange={(value) => {
|
||||
console.log('🏪 Store selector changed:', { value, parsed: value === "all" ? null : parseInt(value) });
|
||||
console.log('🏪 Store selector changed:', {
|
||||
value,
|
||||
userRole: user.role,
|
||||
parsed: value === "all" ? null : parseInt(value)
|
||||
});
|
||||
const newStoreId = value === "all" ? null : parseInt(value);
|
||||
|
||||
// Invalider toutes les variantes de queryKey pour changement magasin
|
||||
@@ -163,15 +177,18 @@ export default function Layout({ children }: LayoutProps) {
|
||||
}}
|
||||
>
|
||||
<SelectTrigger className="w-32 sm:w-64 border border-gray-300">
|
||||
<SelectValue placeholder="Magasin" />
|
||||
<SelectValue placeholder="Sélectionnez un magasin" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="all">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-3 h-3 bg-gray-400"></div>
|
||||
<span>Tous les magasins</span>
|
||||
</div>
|
||||
</SelectItem>
|
||||
{/* Only show "Tous les magasins" option for admin */}
|
||||
{user.role === 'admin' && (
|
||||
<SelectItem value="all">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-3 h-3 bg-gray-400"></div>
|
||||
<span>Tous les magasins</span>
|
||||
</div>
|
||||
</SelectItem>
|
||||
)}
|
||||
{stores.map((store) => (
|
||||
<SelectItem key={store.id} value={store.id.toString()}>
|
||||
<div className="flex items-center gap-2">
|
||||
|
||||
Reference in new issue
Block a user