Aller à l'article
Aniq-UI

KinoraPages, rôles et recherche

Pages, rôles et recherche

Ce que fait chaque page, quel rôle la voit, ce qu'ouvre chaque permission, et comment la recherche trouve les pages et les enregistrements.

Pour le pack Full Stack

Les pages d'un membre

Chaque page existe en anglais sous /en et en arabe sous /ar. Le tableau de bord s'ouvre sur /en/dashboard, après la connexion sur /en/auth/login. Les pages d'un membre demandent fitness.view, que seul le rôle Member détient.

Élément de la barre latéraleCheminRôle
Tableau de bord/en/dashboardLa journée en un coup d'œil : fréquence cardiaque, énergie et récupération, anneaux d'activité, calories et macros, semaines de sommeil et de fréquence cardiaque, prochaines séances d'entraînement et pas.
Assistant IA/en/dashboard/ai-assistantUn chat qui répond sur l'entraînement du membre et enregistre des données pour lui.
Activité/en/dashboard/activityPas, temps actif, calories et distance par jour, semaine ou mois, une carte de chaleur horaire, une répartition par type, et une page par activité enregistrée avec son parcours, ses temps intermédiaires, son dénivelé et sa cadence.
Séances d'entraînement/en/dashboard/workoutsLe programme de la semaine, le travail attribué par le coach et le bilan hebdomadaire, les programmes, la page de chaque séance d'entraînement et la séance en direct.
Bibliothèque d'exercices/en/dashboard/workouts/exercisesChaque mouvement, filtré par muscle, équipement et difficulté, avec une page par mouvement.
Nutrition/en/dashboard/nutritionCalories, macros, hydratation et apports de la semaine.
Planificateur de repas/en/dashboard/nutrition/meal-plannerLes repas d'une journée sur une frise, où le membre enregistre ce qu'il mange.
Sommeil/en/dashboard/sleepPhases, horaires, récupération et tendance de la semaine.
Santé/en/dashboard/healthUn score de santé, l'essentiel de la journée, les constantes et huit semaines de tendances.
Progrès/en/dashboard/progressPerformances, mesures corporelles, séries d'habitudes, records et réussites.
Photos de progression/en/dashboard/progress/photosPhotos avant et après avec un objectif de poids.
Communauté/en/dashboard/communityGroupes, défis, discussions, événements et classement.
Paramètres/en/dashboard/settingsProfil, mot de passe, alertes, confidentialité, apparence, appareils connectés, facturation et suppression du compte.

Les pages de l'équipe

L'équipe arrive sur la vue d'ensemble du coach, à /en/dashboard : la liste de clients en un coup d'œil, les clients devenus silencieux, les bilans hebdomadaires en attente de réponse, le travail attribué pour aujourd'hui et les comptes de la salle. Les panneaux de la liste de clients n'ont de données que pour un compte avec coaching.clients (le Head Coach et les Personal Trainers), et les comptes de la salle n'apparaissent qu'avec members.view ; pour tout autre compte de l'équipe, comme les Coachs du seed, les panneaux de la liste de clients n'ont rien à afficher. Chaque autre page n'apparaît que pour un rôle qui accorde sa permission.

Élément de la barre latéraleCheminPermissionRôle
Mes clients/en/dashboard/clientscoaching.clientsLa liste de clients du coach, et une page par client avec son programme, ses bilans hebdomadaires et ses messages.
Salle/en/dashboard/users/allmembers.viewChaque membre, la page de chacun, et les membres supprimés avec un bouton de restauration.
Contenu/en/dashboard/contentfitness.manageLes catalogues que lisent les membres : exercices, séances d'entraînement, programmes, plats, groupes, événements, défis, réussites et badges.
Coachs/en/dashboard/coachescoaches.viewLes comptes de l'équipe et leurs rôles.
Rôles des coachs/en/dashboard/coach-rolesroles.viewLes rôles et les permissions que chacun accorde.
Paramètres/en/dashboard/settingsTout le mondeProfil, mot de passe, apparence et réglages de l'application.

Deux autres entrées se trouvent sous Demos : UI Component, chaque composant partagé affiché en direct avec son code, et Onboarding, le parcours guidé de première utilisation pour un membre. Retirez-les de navigationData.ts quand vous n'en voulez plus.

Le tableau de bord n'est jamais indexé par les moteurs de recherche : chaque page porte une balise noindex et public/robots.txt interdit tous les chemins.

Les rôles livrés

Les membres et l'équipe partagent une seule table de comptes et une seule connexion ; les rôles décident de ce que chacun voit. Un compte détient toutes les permissions de tous ses rôles. Le seed crée sept rôles :

RôleCe qu'il accorde
Head CoachToutes les permissions sauf la paire d'entraînement fitness.view et fitness.edit
CoachLes membres, les coachs, le contenu, la liste des rôles, les réglages de l'application et le transfert de membres entre coachs
Gym ManagerLes membres, le contenu, les listes des coachs et des rôles, et le transfert de membres entre coachs
EditorLe contenu, et les listes des membres et des coachs
ViewerToutes les permissions .view sauf fitness.view : les écrans de la salle en lecture seule
Personal TrainerSa propre liste de clients (coaching.clients) et le contenu, sans la liste des membres
MembreLa paire d'entraînement : ses propres pages de fitness, et rien au-delà

Chaque rôle détient aussi ai_chat.use, ai_chat.view_models et settings.view : l'assistant, ainsi que son propre profil et ses préférences. Seul le rôle Member s'entraîne : un compte de l'équipe n'a donc jamais ses propres pages de fitness. Un nouveau compte créé depuis la page d'inscription est un Member.

Permissions

ModulePermissions
Les membresmembers.view, members.create, members.update, members.delete, members.restore, members.verify
Coachscoaches.view, coaches.create, coaches.edit, coaches.delete, coaches.assign_roles
Rôlesroles.view, roles.create, roles.edit, roles.delete, roles.assign_permissions
Paramètressettings.view, settings.edit
Fitnessfitness.view, fitness.edit (un compte qui s'entraîne), fitness.manage (les catalogues de contenu)
Coachingcoaching.clients (votre propre liste de clients), coaching.assign (transférer des membres entre coachs)
Assistant IAai_chat.use, ai_chat.view_models

La barre latérale, les pages et l'API vérifient les mêmes noms : un rôle modifié sur l'écran Coach Roles change donc ce que voient ses comptes. Un compte connecté au moment où ses rôles changent reçoit immédiatement les nouvelles permissions, via un socket en direct.

Ctrl+K, ou Cmd+K sur Mac, ouvre la recherche depuis n'importe quelle page, tout comme le champ de recherche de la barre supérieure. Les flèches parcourent les résultats, Enter en ouvre un et Escape la ferme.

  • Elle trouve les pages que le compte peut ouvrir et, pour un membre, les activités, séances d'entraînement, exercices, plats, nuits de sommeil, réussites, groupes, défis et discussions de son index intégré. Cet index est lu depuis les propres données d'exemple du tableau de bord, pas depuis la base de données : avec l'API connectée, ces lignes viennent toujours de l'ensemble d'exemple, pas de ce que chaque membre a enregistré.
  • Avec l'API connectée, elle demande aussi au serveur les enregistrements que le compte peut ouvrir : membres, coachs, rôles et catalogues de contenu. Chaque type demande la permission qu'exige son propre écran : un membre ne voit donc jamais un autre membre dans les résultats.
  • Des colonnes sur le côté limitent les résultats à un seul type. Les six dernières recherches sont mémorisées dans le navigateur.
  • Sur les données d'exemple, la même recherche s'exécute sur les enregistrements d'exemple.

Comment fonctionne la recherche côté serveur

GET /api/search?q=<term>&locale=<en|ar>&limit=<1-10> demande un jeton de connexion et aucune permission particulière. Elle exécute une recherche par type que l'appelant peut ouvrir et laisse les autres de côté.

TypeCorrespondancesPermission
member, coachPrénom, nom, les deux ensemble, nom d'utilisateur, e-mailmembers.view, coaches.view
roleNom, descriptionroles.view
exercise, workout, program, dish, group, event, challenge, achievement, badgeLe nom et les champs propres au type, dans les deux langues, ainsi que le slug ou la cléfitness.manage
  • Un terme de moins de 2 caractères ne renvoie aucun résultat ; un terme plus long est coupé à 100. limit s'applique par type, 5 par défaut et 10 au maximum.
  • Une ligne dont le texte commence par le terme passe avant une ligne dont un mot commence par lui, qui passe avant une ligne qui le contient seulement. À égalité, la plus récemment mise à jour passe en premier.
  • Chaque résultat porte kind, title, detail, image et un href sans le préfixe de langue. Les comptes supprimés sont exclus.

Paramètres

  • Profil et mot de passe : chaque compte modifie les siens.
  • Alertes, confidentialité, appareils et facturation : ceux du membre. Les quatre interrupteurs d'alerte, le partage de l'activité avec la communauté, les appareils et sources de données connectés, et l'abonnement avec ses factures. La facturation est en lecture seule : rien dans le template n'encaisse de paiement.
  • Apparence : thème clair, sombre ou système, une couleur d'accent et des animations réduites, enregistrés avec le compte pour que l'apparence le suive d'un appareil à l'autre.
  • Export : un membre télécharge tout ce qu'il a enregistré sous forme d'un seul fichier JSON.
  • Suppression du compte : un compte se ferme lui-même après confirmation de son mot de passe.
  • Réglages de l'application : les membres de l'équipe avec settings.edit modifient les réglages partagés.

Les réglages d'application du seed sont le nom et le slogan du site, deux adresses e-mail, le mode maintenance, les unités par défaut, le premier jour de la semaine, les objectifs par défaut (pas, eau, sommeil et calories) et deux interrupteurs de fonctionnalités, pour la communauté et l'assistant. Seul l'assistant IA en lit certains : les unités et les objectifs. Le reste est enregistré et modifiable, mais rien ne le lit : activer le mode maintenance ou désactiver une fonctionnalité ne change rien à l'écran tant que vous ne le branchez pas à votre propre code.

Bloqué sur une étape ?

Trouvez une solution avant de tout recommencer.

Dépannage

Préférences des Cookies

Nous utilisons des cookies pour améliorer votre expérience de navigation, analyser le trafic du site et personnaliser le contenu. En cliquant sur "Accepter Tout", vous consentez à notre utilisation des cookies pour l'analyse et la publicité personnalisée.