From ba4c51dd6824d15555e316759d28778a78695c96 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:01:25 +0100 Subject: [PATCH 1/9] Removed duplicate key Signed-off-by: snipe --- resources/lang/en-US/admin/settings/general.php | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/lang/en-US/admin/settings/general.php b/resources/lang/en-US/admin/settings/general.php index 727c35a6e..2bbf74e38 100644 --- a/resources/lang/en-US/admin/settings/general.php +++ b/resources/lang/en-US/admin/settings/general.php @@ -327,7 +327,6 @@ return [ 'labels' => 'Labels', 'labels_title' => 'Update Label Settings', 'labels_help' => 'Label sizes & settings', - 'purge' => 'Purge', 'purge_keywords' => 'permanently delete', 'purge_help' => 'Purge Deleted Records', 'ldap_extension_warning' => 'It does not look like the LDAP extension is installed or enabled on this server. You can still save your settings, but you will need to enable the LDAP extension for PHP before LDAP syncing or login will work.', From 72affd7a5ba775c1842f4660b433ed7530868616 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:01:31 +0100 Subject: [PATCH 2/9] Added migration Signed-off-by: snipe --- ...24_130348_add_profile_edit_to_settings.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 database/migrations/2024_06_24_130348_add_profile_edit_to_settings.php diff --git a/database/migrations/2024_06_24_130348_add_profile_edit_to_settings.php b/database/migrations/2024_06_24_130348_add_profile_edit_to_settings.php new file mode 100644 index 000000000..ee0010e84 --- /dev/null +++ b/database/migrations/2024_06_24_130348_add_profile_edit_to_settings.php @@ -0,0 +1,30 @@ +boolean('profile_edit')->nullable()->default(1); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('settings', function (Blueprint $table) { + if (Schema::hasColumn('settings', 'profile_edit')) { + $table->dropColumn('profile_edit'); + } + }); + } +}; From ce107dd688a9cf1c8a74ba35756c4abd2168da9f Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:01:39 +0100 Subject: [PATCH 3/9] New strings Signed-off-by: snipe --- resources/lang/en-US/admin/settings/general.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/lang/en-US/admin/settings/general.php b/resources/lang/en-US/admin/settings/general.php index 2bbf74e38..8074f5082 100644 --- a/resources/lang/en-US/admin/settings/general.php +++ b/resources/lang/en-US/admin/settings/general.php @@ -373,5 +373,7 @@ return [ 'database_driver' => 'Database Driver', 'bs_table_storage' => 'Table Storage', 'timezone' => 'Timezone', + 'profile_edit' => 'Edit Profile', + 'profile_edit_help' => 'Allow users to edit their own profiles.', ]; From aa5fe52e8943e4c7410703c9e04d2886d5c0c70a Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:01:56 +0100 Subject: [PATCH 4/9] Added gate in blade Signed-off-by: snipe --- resources/views/layouts/default.blade.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index db9ad35e8..9d3e8aef9 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -353,12 +353,15 @@ dir="{{ in_array(app()->getLocale(),['ar-SA','fa-IR', 'he-IL']) ? 'rtl' : 'ltr' + @can('self.profile')
  • {{ trans('general.editprofile') }}
  • + @endcan +
  • From 52c48853359a4f2826e296c2e855416b8abfc3d4 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:02:17 +0100 Subject: [PATCH 5/9] Added method for checking if the user can edit their own profile Signed-off-by: snipe --- app/Models/User.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/Models/User.php b/app/Models/User.php index 22291cd9c..30e32061e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -204,6 +204,23 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo return $this->checkPermissionSection('superuser'); } + + /** + * Checks if the can edit their own profile + * + * @author A. Gianotto + * @since [v6.3.4] + * @return bool + */ + public function canEditProfile() : bool { + + $setting = Setting::getSettings(); + if ($setting->profile_edit == 1) { + return true; + } + return false; + } + /** * Checks if the user is deletable * From 2b43f3cb844950873e604d7969d1a3865df6aa69 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:02:40 +0100 Subject: [PATCH 6/9] Added gate to auth service provider Signed-off-by: snipe --- app/Providers/AuthServiceProvider.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 51e6858c9..e17d66784 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -232,5 +232,12 @@ class AuthServiceProvider extends ServiceProvider || $user->can('update', User::class) || $user->can('create', User::class); }); + + + // This determines whether the user can edit their profile based on the setting in Admin > General + Gate::define('self.profile', function ($user) { + return $user->canEditProfile(); + }); + } } From 4d55765e28eeefd6e3f4688fc7db6159a8c3fa60 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:02:53 +0100 Subject: [PATCH 7/9] Added checkbox to settings Signed-off-by: snipe --- resources/views/settings/general.blade.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/resources/views/settings/general.blade.php b/resources/views/settings/general.blade.php index d30e4308f..b432b6544 100644 --- a/resources/views/settings/general.blade.php +++ b/resources/views/settings/general.blade.php @@ -113,6 +113,22 @@ + +
    +
    + +
    +
    + + +
    +
    +
    From 73a038afd413f78b9114d9795ca4d8cffe50bab7 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:03:01 +0100 Subject: [PATCH 8/9] Save new setting Signed-off-by: snipe --- app/Http/Controllers/SettingsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index c0ffec8df..a3c3cab8f 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -351,9 +351,9 @@ class SettingsController extends Controller $setting->load_remote = $request->input('load_remote', 0); $setting->thumbnail_max_h = $request->input('thumbnail_max_h'); $setting->privacy_policy_link = $request->input('privacy_policy_link'); - $setting->depreciation_method = $request->input('depreciation_method'); $setting->dash_chart_type = $request->input('dash_chart_type'); + $setting->profile_edit = $request->input('profile_edit', 0); if ($request->input('per_page') != '') { $setting->per_page = $request->input('per_page'); From 1c14c2fdef5a54509974834ce55037cec97ecf4e Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 24 Jun 2024 14:05:21 +0100 Subject: [PATCH 9/9] Added gates to controller Signed-off-by: snipe --- app/Http/Controllers/ProfileController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 41d0bbb5a..72179161f 100755 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -28,8 +28,8 @@ class ProfileController extends Controller */ public function getIndex() { + $this->authorize('self.profile'); $user = Auth::user(); - return view('account/profile', compact('user')); } @@ -42,6 +42,7 @@ class ProfileController extends Controller */ public function postIndex(ImageUploadRequest $request) { + $this->authorize('self.profile'); $user = Auth::user(); $user->first_name = $request->input('first_name'); $user->last_name = $request->input('last_name');