Рекомендуемый шаблон для входа/выхода, навигации на основе ролей и динамического всплывающего окна в оболочке .NET MAUI C#

Место общения программистов C#
Ответить
Anonymous
 Рекомендуемый шаблон для входа/выхода, навигации на основе ролей и динамического всплывающего окна в оболочке .NET MAUI

Сообщение Anonymous »

Рекомендуемый шаблон для входа/выхода, ролевой навигации и динамического всплывающего окна в оболочке .NET MAUI
Тело
Я создаю приложение .NET MAUI с использованием оболочки и пытаюсь определить наиболее правильный и стабильный подход к реализации:
  • Последовательность входа и выхода
  • Ролевая навигация
  • Динамическое всплывающее окно (боковое меню)
  • Правильный сброс стека навигации при выходе из системы
Я читал много руководств и ответов StackOverflow, но они часто противоречат друг другу, особенно в отношении маршрутизации Shell и глобальных маршрутов и того, должны ли страницы входа находиться внутри Shell.

Чего я хочу достичь
  • Пользователи проходят аутентификацию через LoginPage
  • После входа в систему приложение динамически создает всплывающее меню на основе роли пользователя

    (например, администратор видит больше пунктов меню, чем пользователь)
  • При выходе из системы стек навигации полностью сбрасывается и пользователь перенаправляется на страницу входа в систему.
  • После выхода из системы обратная навигация невозможна.
  • Всплывающее меню скрыто перед аутентификацией.
Подход 1 — вход в систему как глобальный маршрут

Код: Выделить всё

Routing.RegisterRoute("login", typeof(LoginPage));
await Shell.Current.GoToAsync("login");
Проблемы:
  • Использование абсолютной навигации () выдает:

    "Глобальные маршруты в настоящее время не могут быть единственной страницей в стеке"
  • Shell требует хотя бы один ShellItem
  • Трудно определить корневую страницу для сброса навигации
Подход 2 — Вход как ShellContent При таком подходе:
  • Код: Выделить всё

    await Shell.Current.GoToAsync("//login")
    работает надежно
  • Обратный стек очищается правильно
  • Логин не виден во всплывающем окне
  • После входа в систему я динамически добавляю элементы FlyoutItems
Но я часто вижу утверждения, что «страницы входа не должны жить» внутри оболочки», что сбивает с толку.

Создание динамического всплывающего окна

Код: Выделить всё

var flyout = new FlyoutItem
{
FlyoutDisplayOptions = FlyoutDisplayOptions.AsSingleItem
};

foreach (var item in menuService.GetMenu(userRole))
{
flyout.Items.Add(new ShellContent
{
Title = item.Title,
ContentTemplate = new DataTemplate(item.PageType)
});
}

Shell.Current.Items.Add(flyout);
Вопросы
  • Какой рекомендуемый/идиоматический шаблон для входа и выхода из системы в MAUI Shell?
  • Приемлемо ли (или рекомендуется) сохранять LoginPage как ShellContent?
  • Приемлемо ли (или рекомендуется) сохранять LoginPage как ShellContent?
  • Является ли динамическое создание FlyoutItems на основе ролей пользователей — правильный подход?
  • Как следует сбрасывать состояние навигации при выходе из системы?
Я стремлюсь к чистой архитектуре, долгосрочной простоте обслуживания и избежанию крайних случаев Shell.

Подробнее здесь: https://stackoverflow.com/questions/798 ... mic-flyout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»