import 'package:flutter/material.dart'; import '../theme/etm_tokens.dart'; /// Les permissions natives de nymea:core (scopes appliqués par le cœur). enum NymeaPermission { admin, controlThings, configureThings, executeMagic, configureMagic, } /// Rôle d'affichage déduit des permissions. enum EtmRole { utilisateur, installateur, admin } extension EtmRoleDisplay on EtmRole { String get label => switch (this) { EtmRole.utilisateur => 'UTILISATEUR', EtmRole.installateur => 'INSTALLATEUR', EtmRole.admin => 'ADMIN ETM', }; Color get color => switch (this) { EtmRole.utilisateur => EtmTokens.blue, EtmRole.installateur => EtmTokens.orange, EtmRole.admin => EtmTokens.danger, }; } /// Utilisateur nymea authentifié avec son jeu de permissions. @immutable class NymeaUser { const NymeaUser({ required this.name, required this.username, this.email, this.permissions = const {}, }); final String name; final String username; final String? email; final Set permissions; bool can(NymeaPermission p) => permissions.contains(p); bool get canConfigure => can(NymeaPermission.configureThings) || can(NymeaPermission.configureMagic); bool get isAdmin => can(NymeaPermission.admin); EtmRole get role { if (isAdmin) return EtmRole.admin; if (canConfigure) return EtmRole.installateur; return EtmRole.utilisateur; } static const Set clientScopes = { NymeaPermission.controlThings, NymeaPermission.executeMagic, }; static const Set installerScopes = { NymeaPermission.controlThings, NymeaPermission.executeMagic, NymeaPermission.configureThings, NymeaPermission.configureMagic, }; static const Set adminScopes = { NymeaPermission.admin, NymeaPermission.controlThings, NymeaPermission.executeMagic, NymeaPermission.configureThings, NymeaPermission.configureMagic, }; }