From 93b8cc86a535c73673a39b9fffff97b5a34122a2 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 25 Dec 2024 07:21:37 +0000 Subject: [PATCH] feat: Enhance user permissions handling when no users on server --- lib/auth.dart | 21 +++++++++++++-------- lib/dialog/new_user_page.dart | 21 +++++++++++++-------- lib/globals.dart | 2 +- lib/pages/home.dart | 2 +- lib/pages/settings.dart | 2 +- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/lib/auth.dart b/lib/auth.dart index a9acd6a..9a1f94e 100644 --- a/lib/auth.dart +++ b/lib/auth.dart @@ -16,6 +16,7 @@ class AuthInfo { ServerStatus? get status => _status; Token? _token; Token? get token => _token; + bool? get noUser => _status?.noUser; SharedToken? _sharedToken; SharedToken? get sharedToken => _sharedToken; bool get isAuthed => (_user != null); @@ -26,14 +27,18 @@ class AuthInfo { bool? get isAdmin => _user?.isAdmin; bool? get isRoot => _user != null ? _user!.id == 0 : null; bool? get isDocker => _status?.isDocker; - bool? get canReadGallery => - _user?.permissions.has(UserPermission.readGallery); - bool? get canEditGallery => - _user?.permissions.has(UserPermission.editGallery); - bool? get canDeleteGallery => - _user?.permissions.has(UserPermission.deleteGallery); - bool? get canManageTasks => - _user?.permissions.has(UserPermission.manageTasks); + bool? get canReadGallery => noUser == true + ? true + : _user?.permissions.has(UserPermission.readGallery); + bool? get canEditGallery => noUser == true + ? true + : _user?.permissions.has(UserPermission.editGallery); + bool? get canDeleteGallery => noUser == true + ? true + : _user?.permissions.has(UserPermission.deleteGallery); + bool? get canManageTasks => noUser == true + ? true + : _user?.permissions.has(UserPermission.manageTasks); bool? get canShareGallery => _user?.permissions.has(UserPermission.shareGallery); MeilisearchInfo? get meilisearch => _status?.meilisearch; diff --git a/lib/dialog/new_user_page.dart b/lib/dialog/new_user_page.dart index 9e3add6..5a3723e 100644 --- a/lib/dialog/new_user_page.dart +++ b/lib/dialog/new_user_page.dart @@ -92,6 +92,9 @@ class _NewUserPage extends State { } final i18n = AppLocalizations.of(context)!; final maxWidth = MediaQuery.of(context).size.width; + if (auth.noUser == true) { + _isAdmin = true; + } return Container( padding: maxWidth < 400 ? const EdgeInsets.symmetric(vertical: 20, horizontal: 5) @@ -159,16 +162,18 @@ class _NewUserPage extends State { }, obscureText: !_passwordVisible, )), - auth.isRoot == true + auth.isRoot == true || auth.noUser == true ? _buildWithVecticalPadding(LabeledCheckbox( value: _isAdmin, - onChanged: (b) { - if (b != null) { - setState(() { - _isAdmin = b; - }); - } - }, + onChanged: auth.noUser == true + ? null + : (b) { + if (b != null) { + setState(() { + _isAdmin = b; + }); + } + }, label: Text(i18n.admin))) : Container(), !_isAdmin diff --git a/lib/globals.dart b/lib/globals.dart index 9f7a619..4a20991 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -238,7 +238,7 @@ List> buildMoreVertSettings( list.add(PopupMenuItem( value: MoreVertSettings.taskManager, child: Text(i18n.taskManager))); } - if (path != "/sessions") { + if (path != "/sessions" && auth.noUser != true) { list.add(PopupMenuItem( value: MoreVertSettings.sessions, child: Text(i18n.sessionManagemant))); } diff --git a/lib/pages/home.dart b/lib/pages/home.dart index d9d9b01..2dedb59 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -42,7 +42,7 @@ class HomeDrawer extends StatelessWidget { }, ) : Container(), - auth.isAdmin == true + auth.isAdmin == true || auth.noUser == true ? ListTile( leading: const Icon(Icons.manage_accounts), title: Text(i18n.userManagemant), diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index bb3c24c..4e32c9c 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -85,7 +85,7 @@ class _SettingsPage extends State onTap: () { context.push("/settings/cache"); }), - auth.isAdmin == true + auth.isAdmin == true || auth.noUser == true ? ListTile( leading: const Icon(Icons.admin_panel_settings), title: Text(i18n.server),