From 14eb73098e9b9de5ab5bf26ca4ae9f685a587a48 Mon Sep 17 00:00:00 2001 From: Brian Read Date: Fri, 23 May 2025 13:06:39 +0100 Subject: [PATCH] Get Permissions edit working - Remove hangs --- .../lib/SrvMngr/Controller/Shares-Custom.pm | 114 ++++-------------- .../SrvMngr/I18N/Modules/Shares/shares_en.lex | 20 +-- .../templates/partials/_sf_MODIFY.html.ep | 4 +- .../partials/_sf_PERMISSIONS.html.ep | 8 +- .../templates/partials/_sf_REMOVE.html.ep | 2 +- 5 files changed, 39 insertions(+), 109 deletions(-) diff --git a/root/usr/share/smanager/lib/SrvMngr/Controller/Shares-Custom.pm b/root/usr/share/smanager/lib/SrvMngr/Controller/Shares-Custom.pm index 2098ec7..2d96504 100644 --- a/root/usr/share/smanager/lib/SrvMngr/Controller/Shares-Custom.pm +++ b/root/usr/share/smanager/lib/SrvMngr/Controller/Shares-Custom.pm @@ -251,7 +251,6 @@ sub actual_Table1 { foreach my $share (@shares) { my $sharename = $share->key(); my $sharedesc = $share->prop('Name'); - $c->app->log->info("$sharename : $sharedesc"); next if (($share->prop('Hide') || 'no') eq 'yes'); my $removable = $share->prop('Removable') || 'yes'; my $actionModify = ''.$c->l('sf_Modify').''; @@ -459,88 +458,13 @@ sub get_Table3 { sub perform_PERMISSIONS { my $c = shift; - my $sf_data = shift; #Data hash as parameter - my $ret = ""; - my $db = $cdb; #maybe one of the others - my $dbkey = 'ChangeThis'; - # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g." + $ret = $c->modify_perm(); - if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service')) - {$ret .= 'Perform/save failed for writegroup';} - if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service')) - {$ret .= 'Perform/save failed for readgroup';} - if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service')) - {$ret .= 'Perform/save failed for writegroup';} - if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service')) - {$ret .= 'Perform/save failed for readgroup';} - if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service')) - {$ret .= 'Perform/save failed for writegroup';} - if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service')) - {$ret .= 'Perform/save failed for readgroup';} - if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service')) - {$ret .= 'Perform/save failed for writegroup';} - if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service')) - {$ret .= 'Perform/save failed for readgroup';} - if (! TRUE) #copy or perform with value: writegroup e.g. $db->set_prop($dbkey,'writegroup',$c->param('writegroup'),type=>'service')) - {$ret .= 'Perform/save failed for writegroup';} - if (! TRUE) #copy or perform with value: readgroup e.g. $db->set_prop($dbkey,'readgroup',$c->param('readgroup'),type=>'service')) - {$ret .= 'Perform/save failed for readgroup';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} - if (! TRUE) #copy or perform with value: writeuser e.g. $db->set_prop($dbkey,'writeuser',$c->param('writeuser'),type=>'service')) - {$ret .= 'Perform/save failed for writeuser';} - if (! TRUE) #copy or perform with value: readuser e.g. $db->set_prop($dbkey,'readuser',$c->param('readuser'),type=>'service')) - {$ret .= 'Perform/save failed for readuser';} + #my $sf_data = shift; #Data hash as parameter + #my $ret = ""; + #my $db = $cdb; #maybe one of the others + #my $dbkey = 'ChangeThis'; + if ($ret eq "") {$ret = 'ok';} return $ret; } @@ -549,9 +473,6 @@ sub get_Table3 { my $c = shift; my $sf_data = shift; #Data hash as parameter my $ret = ""; - my $db = $cdb; #maybe one of the others - my $dbkey = 'ChangeThis'; - # To make it write to DB as comment, delete this (regex) string in each if statement "TRUE\) \#copy or perform with value: .* e.g." $ret = $c->remove_share(); if ($ret eq "") {$ret = 'ok';} return $ret; @@ -680,22 +601,31 @@ sub modify_perm { my $encryption = $acct->prop('Encryption') || 'disabled'; - my $WriteGroups = join(",", $c->param('writegroup')); - my $WriteUsers = join(",", $c->param('writeuser')); + my @selected = @{$c->every_param('panelAccess')}; + my $AdminPanels = join(',', @selected); + + my @selectedwritegroups = @{$c->every_param('writegroup')}; + my $WriteGroups = join(",", @selectedwritegroups); + my @selectedwriteusers = @{$c->every_param('writeuser')}; + my $WriteUsers = join(",", @selectedwriteusers); + my @CleanReadGroups = (); my @CleanReadUsers = (); # EncFS doesn't expose underlying ACLs # So, just remove any read only groups # Read Only is not supported with encryption + my @selectedreadgroups = @{$c->every_param('readgroup')}; + my @selectedreadusers = @{$c->every_param('readuser')}; + if ($encryption ne 'enabled'){ # No need to have read access if write is already granted - foreach my $group ($c->param('readgroup')){ - push (@CleanReadGroups, $group) unless (grep { $_ eq $group } $c->param('writegroup')); + foreach my $group (@selectedreadgroups){ + push (@CleanReadGroups, $group) unless (grep { $_ eq $group } @selectedwritegroups); } - foreach my $user ($c->param('readuser')){ - push (@CleanReadUsers, $user) unless (grep { $_ eq $user } $c->param('writeuser')); + foreach my $user (@selectedreadusers){ + push (@CleanReadUsers, $user) unless (grep { $_ eq $user } @selectedwriteusers); } } my $ReadGroups = join(",",@CleanReadGroups); @@ -716,7 +646,7 @@ sub modify_perm { else { return $c->l("sf_ERROR_WHILE_MODIFYING_SHARE"); } - return undef; + return ""; } # Remove a share diff --git a/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Shares/shares_en.lex b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Shares/shares_en.lex index 8507d6d..5f0213c 100644 --- a/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Shares/shares_en.lex +++ b/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Shares/shares_en.lex @@ -9,14 +9,14 @@ 'sf_Modify' => 'Modify', 'sf_dynamic' => 'Dynamic', 'sf_description' => 'Description', -'sf_The_following_settings_control_the' => 'The following settings control the access of this shared folder using the HTTP/HTTPS protocol', -'sf_Create,_modify,_or_remove_shared' => 'create modify Or remove shared folders', +'sf_The_following_settings_control_the_HTTP' => 'The following settings control the access of this shared folder using the HTTP/HTTPS protocol', +'sf_Create,_modify,_or_remove_shared' => 'Create Modify or Remove shared folders', 'sf_Remove' => 'Remove', -'sf_httpaccess' => 'Httpaccess', +'sf_httpaccess' => 'HTTP access', 'sf_readuser' => 'reader', 'sf_Cancel' => 'Cancel', 'sf_All_files_belonging_to_this' => 'All files belonging to this shared folder will be deleted', -'sf_smbaccess' => 'Smbaccess', +'sf_smbaccess' => 'SMB access', 'sf_You_can_use_this_matrix' => 'You can use this matrix to define groups and users access permissions', 'sf_webdav' => 'Webdav', 'sf_Create_a_new_shared_folder' => 'Create a new shared folder', @@ -26,16 +26,16 @@ 'sf_Shared_Folders' => 'Shared Folders', 'sf_MODIFY_panel_action_was_successful' => 'MODIFY panel action was successful', 'sf_indexes' => 'Indexes', -'sf_Are_you_sure_you_wish' => 'Are you sure you wish to remove it ?', +'sf_Are_you_sure_you_wish' => 'Are you sure you wish to remove it ? Use BACK in your browser if you wish to retain the share.', 'sf_Actionm' => 'action', 'sf_writeuser' => 'Writeuser', 'sf_LIST_panel_action_was_successful' => 'LIST panel action was successful', 'sf_Remove_shared_folder' => 'Remove shared folder', 'sf_PERMISSIONS_panel_action_was_successful' => 'PERMISSIONS panel action was successful', -'sf_Manage_shared-folders_settings:' => 'Manage shared-folders settings', -'sf_You_can_remove_any_shared' => 'You can remove any shared folder by clicking on the corresponding command next to the shared folder', +'sf_Manage_shared-folders_settings:' => 'Manage Shared Folder settings', +'sf_You_can_remove_any_shared' => 'You can remove or edit any shared folder by clicking on the corresponding action', 'sf_APPLY' => 'Apply', -'sf_requireSSL' => 'requires', +'sf_requireSSL' => 'Require SSL', 'sf_Groups' => 'Groups', 'sf_Save' => 'Save', 'sf_Actionp' => 'action', @@ -43,8 +43,8 @@ 'sf_Name' => 'Name', 'sf_Read_Only' => 'Read Only', 'sf_retention' => 'Retention', -'sf_Access_right_management' => 'Access right management', +'sf_Access_right_management' => 'Access rights management', 'sf_Read_/_Write' => 'Read / Write', 'sf_Create_or_modify_a_shared' => 'Create or modify a shared folder', -'sf_The_following_settings_control_the' => 'The following settings control the access of this shared folder from the local network Using the SMB/CIFS protocol', +'sf_The_following_settings_control_the_SMB' => 'The following settings control access to this shared folder from the local network Using the SMB/CIFS protocol', 'sf_recyclebin' => 'Recyclebin', \ No newline at end of file diff --git a/root/usr/share/smanager/themes/default/templates/partials/_sf_MODIFY.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_sf_MODIFY.html.ep index 3a33e79..a2f4cd3 100644 --- a/root/usr/share/smanager/themes/default/templates/partials/_sf_MODIFY.html.ep +++ b/root/usr/share/smanager/themes/default/templates/partials/_sf_MODIFY.html.ep @@ -50,7 +50,7 @@

- %=l('sf_The_following_settings_control_the') + %=l('sf_The_following_settings_control_the_SMB')

@@ -78,7 +78,7 @@

- %=l('sf_The_following_settings_control_the') + %=l('sf_The_following_settings_control_the_HTTP')

diff --git a/root/usr/share/smanager/themes/default/templates/partials/_sf_PERMISSIONS.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_sf_PERMISSIONS.html.ep index bd6e858..2e24f6d 100644 --- a/root/usr/share/smanager/themes/default/templates/partials/_sf_PERMISSIONS.html.ep +++ b/root/usr/share/smanager/themes/default/templates/partials/_sf_PERMISSIONS.html.ep @@ -59,8 +59,8 @@ <%=$c->render_to_string(inline=>$row->{'Table2_Groups'})%> <%=$c->render_to_string(inline=>$row->{'Table2_Description'})%> - <%=check_box 'writegroup',($row->{'Table2_Read / Write'} ? ('checked' => 1) : ())%> - <%=check_box 'readgroup',($row->{'Table2_Read Only'} ? ('checked' => 1) : ())%> + <%= check_box 'writegroup', value => $row->{'Table2_Groups'}, ($row->{'Table2_Read / Write'} ? (checked => 'checked') : ()) %> + <%= check_box 'readgroup', value => $row->{'Table2_Groups'}, ($row->{'Table2_Read Only'} ? (checked => 'checked') : ()) %> %} @@ -81,8 +81,8 @@ <%=$c->render_to_string(inline=>$row->{'Table3_Users'})%> <%=$c->render_to_string(inline=>$row->{'Table3_Description'})%> - <%=check_box 'writeuser',($row->{'Table3_Read / Write'} ? ('checked' => 1) : ())%> - <%=check_box 'readuser',($row->{'Table3_Read Only'} ? ('checked' => 1) : ())%> + <%= check_box 'writeuser', value => $row->{'Table3_Users'}, ($row->{'Table3_Read / Write'} ? (checked => 'checked') : ()) %> + <%= check_box 'readuser', value => $row->{'Table3_Users'}, ($row->{'Table3_Read Only'} ? (checked => 'checked') : ()) %> %} diff --git a/root/usr/share/smanager/themes/default/templates/partials/_sf_REMOVE.html.ep b/root/usr/share/smanager/themes/default/templates/partials/_sf_REMOVE.html.ep index 8e016aa..8f0b4e7 100644 --- a/root/usr/share/smanager/themes/default/templates/partials/_sf_REMOVE.html.ep +++ b/root/usr/share/smanager/themes/default/templates/partials/_sf_REMOVE.html.ep @@ -52,7 +52,7 @@

- %= submit_button l('sf_Cancel'), class => 'action subm149' + %#= submit_button l('sf_Cancel'), class => 'action subm149'