feat: Enhance user permissions handling when no users on server

This commit is contained in:
2024-12-25 07:21:37 +00:00
committed by GitHub
parent 69c52ee8d6
commit 93b8cc86a5
5 changed files with 29 additions and 19 deletions

View File

@@ -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;

View File

@@ -92,6 +92,9 @@ class _NewUserPage extends State<NewUserPage> {
}
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<NewUserPage> {
},
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

View File

@@ -238,7 +238,7 @@ List<PopupMenuEntry<MoreVertSettings>> 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)));
}

View File

@@ -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),

View File

@@ -85,7 +85,7 @@ class _SettingsPage extends State<SettingsPage>
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),