From 54bab006679e6ec01730d28058559a5716a159df Mon Sep 17 00:00:00 2001 From: Developer Date: Wed, 8 Apr 2026 01:37:09 +0800 Subject: [PATCH] feat: add RouteGuard for authentication --- lib/src/standards/route_guard.dart | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lib/src/standards/route_guard.dart diff --git a/lib/src/standards/route_guard.dart b/lib/src/standards/route_guard.dart new file mode 100644 index 0000000..aec71c3 --- /dev/null +++ b/lib/src/standards/route_guard.dart @@ -0,0 +1,45 @@ +import 'package:get/get.dart'; +import 'package:mom_kitchen/src/standards/app_pages.dart'; +import 'package:mom_kitchen/src/controllers/profile_controller.dart'; + +enum AuthLevel { none, optional, required } + +class RouteGuard { + static bool canAccess(String route, {String? userId}) { + final pageInfo = PageRegistry.getPage(route); + if (pageInfo == null) return false; + + final authLevel = pageInfo.metadata?['authLevel'] as AuthLevel? ?? AuthLevel.none; + + switch (authLevel) { + case AuthLevel.none: + return true; + case AuthLevel.optional: + return true; + case AuthLevel.required: + return userId != null && userId.isNotEmpty; + } + } + + static String? getRedirectRoute(String route, {String? userId}) { + if (canAccess(route, userId: userId)) return null; + + return '/login'; + } + + static Future checkAuth(String route) async { + final profileController = Get.find(); + await profileController.checkLoginStatus(); + + final userId = profileController.user.value?.id; + return canAccess(route, userId: userId); + } + + static Future getAuthRedirect(String route) async { + final profileController = Get.find(); + await profileController.checkLoginStatus(); + + final userId = profileController.user.value?.id; + return getRedirectRoute(route, userId: userId); + } +}