Modifications des permissions, ajout Presta OK, vue calendrier ok

This commit is contained in:
2025-05-24 23:50:07 +02:00
parent 249a6d6074
commit 851b891a8a
18 changed files with 1077 additions and 304 deletions

View File

@ -11,24 +11,29 @@ class EventProvider with ChangeNotifier {
bool get isLoading => _isLoading;
// Récupérer les événements pour un utilisateur spécifique
Future<void> loadUserEvents(String userId) async {
Future<void> loadUserEvents(String userId,
{bool canViewAllEvents = false}) async {
_isLoading = true;
notifyListeners();
try {
print('Loading events for user: $userId');
// Récupérer uniquement les événements où l'utilisateur est dans la workforce
final eventsSnapshot = await _firestore
.collection('events')
.where('workforce', arrayContains: userId)
.get();
print(
'Loading events for user: $userId (canViewAllEvents: $canViewAllEvents)');
QuerySnapshot eventsSnapshot;
if (canViewAllEvents) {
eventsSnapshot = await _firestore.collection('events').get();
} else {
eventsSnapshot = await _firestore
.collection('events')
.where('workforce', arrayContains: userId)
.get();
}
print('Found ${eventsSnapshot.docs.length} events for user');
_events = eventsSnapshot.docs.map((doc) {
print('Event data: ${doc.data()}');
return EventModel.fromMap(doc.data(), doc.id);
return EventModel.fromMap(doc.data() as Map<String, dynamic>, doc.id);
}).toList();
print('Parsed ${_events.length} events');

View File

@ -3,10 +3,12 @@ import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import '../models/user_model.dart';
import '../models/role_model.dart';
import '../utils/firebase_storage_manager.dart';
class LocalUserProvider with ChangeNotifier {
UserModel? _currentUser;
RoleModel? _currentRole;
final FirebaseAuth _auth = FirebaseAuth.instance;
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final FirebaseStorageManager _storageManager = FirebaseStorageManager();
@ -19,6 +21,8 @@ class LocalUserProvider with ChangeNotifier {
String? get profilePhotoUrl => _currentUser?.profilePhotoUrl;
String? get email => _currentUser?.email;
String? get phoneNumber => _currentUser?.phoneNumber;
RoleModel? get currentRole => _currentRole;
List<String> get permissions => _currentRole?.permissions ?? [];
/// Charge les données de l'utilisateur actuel
Future<void> loadUserData() async {
@ -47,6 +51,7 @@ class LocalUserProvider with ChangeNotifier {
setUser(UserModel.fromMap(userData, userDoc.id));
print('User data loaded successfully');
await loadRole();
} else {
print('No user document found in Firestore');
// Créer un document utilisateur par défaut
@ -73,6 +78,7 @@ class LocalUserProvider with ChangeNotifier {
setUser(defaultUser);
print('Default user document created');
await loadRole();
}
} catch (e) {
print('Error loading user data: $e');
@ -154,4 +160,24 @@ class LocalUserProvider with ChangeNotifier {
await _auth.signOut();
clearUser();
}
Future<void> loadRole() async {
if (_currentUser == null) return;
final roleId = _currentUser!.role;
if (roleId.isEmpty) return;
try {
final doc = await _firestore.collection('roles').doc(roleId).get();
if (doc.exists) {
_currentRole =
RoleModel.fromMap(doc.data() as Map<String, dynamic>, doc.id);
notifyListeners();
}
} catch (e) {
print('Error loading role: $e');
}
}
bool hasPermission(String permission) {
return _currentRole?.permissions.contains(permission) ?? false;
}
}

View File

@ -4,6 +4,8 @@ import '../services/user_service.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
import 'package:provider/provider.dart';
import 'package:em2rp/providers/local_user_provider.dart';
class UsersProvider with ChangeNotifier {
final UserService _userService;
@ -75,7 +77,8 @@ class UsersProvider with ChangeNotifier {
await _userService.resetPassword(email);
}
Future<void> createUserWithEmailInvite(UserModel user) async {
Future<void> createUserWithEmailInvite(
BuildContext context, UserModel user) async {
String? authUid;
try {
@ -87,14 +90,12 @@ class UsersProvider with ChangeNotifier {
throw Exception('Aucun utilisateur connecté');
}
// Vérifier le rôle de l'utilisateur actuel
final currentUserDoc =
await _firestore.collection('users').doc(currentUser.uid).get();
print('Current user role: ${currentUserDoc.data()?['role']}');
if (currentUserDoc.data()?['role'] != 'ADMIN') {
// Vérifier la permission via le provider
final localUserProvider =
Provider.of<LocalUserProvider>(context, listen: false);
if (!localUserProvider.hasPermission('add_user')) {
throw Exception(
'Seuls les administrateurs peuvent créer des utilisateurs');
'Vous n\'avez pas la permission de créer des utilisateurs');
}
try {