Modifications des permissions, ajout Presta OK, vue calendrier ok
This commit is contained in:
@ -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');
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user