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'); 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'); 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 * 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(); + }); + } } 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'); + } + }); + } +}; diff --git a/resources/lang/en-US/admin/settings/general.php b/resources/lang/en-US/admin/settings/general.php index 727c35a6e..8074f5082 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.', @@ -374,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.', ]; 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 +
  • 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 @@ + +
    +
    + +
    +
    + + +
    +
    +