Afficher la liste des User avec Directus

Bonjour !

J’ai besoin d’afficher la liste des utilisateurs de mon application, mais comme il s’agit d’un type particulier, j’essaie de reprendre l’exemple de @jmjoary dans son meet-up, à savoir :

Capture d’écran 2023-03-20 095307

Mais la procédure d’accès aux données étant différente ici, savez-vous pourquoi il faut mentionner les paramètres "roleRetailerID et roleReaderID en « dur » ? s’agit-il des ID de l’admin ?

Merci !

roleRetailerID et roleReaderID sont spécifiques à mon projet. Tu n’es pas obligé de les déclarer.

Bonjour @StuntmanMike,
« roleRetailerID » et « roleReaderID » sont des rôles que @jmjoary a défini dans son projet Directus (dans la section « Rôles &Permissions ». Cela lui permet de passer un type de rôle en paramètre pour n’avoir que les Users correspondant à ce rôle précis.
Pour cela, il suffit de te rendre dans ton projet Directus > Roles & Permissions > Créer un utilisateur. Lorsque tu fais un Get sur cet utilisateur (dans RapidApi par exemple), tu peux accéder à l’id du rôle et le stocker en dur dans ton app si besoin.
J’espère avoir été clair.

Merci de vos réponses :pray: !

Mais finalement la méthode fonctionnant très bien pour n’importe quelle collection ne peut donc pas être employée pour les utilisateurs ?

class UserService extends DirectusService {
  UserService({required DirectusApiManager apiManager})
      : super(
          apiManager: apiManager,
          typeName: 'directus_users',
          fields: '*,email.*',
        );

  @override
  Users fromDirectus(rawData) {
    return Users(rawData);
  }

De plus lorsqu’on ajoute un champ personnalisé à la collection User, ce dernier semble forcément réservé à l’admin, existe-t-il un moyen pour qu’il en soit autrement ?

Afin de fournir un peu de matière, dans mon userService :

class UserService extends DirectusService<Users> {
  UserService({required DirectusApiManager apiManager})
      : super(
          apiManager: apiManager,
          typeName: 'directus_users',
          fields: '*,email.*',
        );

  @override
  Users fromDirectus(rawData) {
    return Users(rawData);
  }

  Future<List<Users>> getAllUsers() async {
    try {
      return List<Users>.from(await apiManager.getDirectusUserList());
    } catch (exe) {
      throw false;
    }
  }

Mon Users model :

import 'package:directus_api_manager/directus_api_manager.dart';

class Users extends DirectusItem {
  Users(super.rawReceivedData) {}

  Users.newItem() : super.newItem();
  @override
  String get endpointName => 'directus_users';

  String get email => getValue(forKey: "email");
  set email(String value) => setValue(value, forKey: "email");
}

et mon viewmodel :

 @override
  Future<List<Users>> getUsers() async {
    final UserService userService = UserService(apiManager: _apiDirectus);
    List<Users> allUsers = await userService.getAllUsers();
    print(allUsers.elementAt(1).email);
    return allUsers;
  }

Mais cela ne renvoie rien… Pour autant aucune erreur de compilation évidemment

ça peut être dû à tes autorisations dans Directus.

oui c’est vrai. La collection utilisateur doit faire appel à des URL différentes à l’API. C’est la seule collection où il faut créer le service à la main.

Peut être que @mbritto parle de cela justement. Roulement de tambour jusqu’à mercredi.

Merci, vous êtes top !

Solution simple : ne pas chercher à récupérer un model User, mais utiliser DirectusUser…