user(); if ($actor && ! \App\Utilities\SystemAccess::isSuperAdmin($actor)) { $target = $this->route('user'); $target = $target instanceof \App\Models\Auth\User ? $target : \App\Models\Auth\User::find($target); if ($target && $target->id !== $actor->id && \App\Utilities\SystemAccess::canOpenSettings($target)) { return false; } if ($this->filled('permissions')) { return false; } if ($this->has('roles')) { $requested = array_map('strval', (array) $this->input('roles')); $current = $target ? $target->roles()->pluck('id')->map(fn ($id) => (string) $id)->all() : []; sort($requested); sort($current); if ($requested !== $current) { $allowed = \App\Models\Auth\Role::where('name', 'user')->pluck('id')->map(fn ($id) => (string) $id)->all(); if (array_diff($requested, $allowed)) { return false; } } } } return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $picture = 'nullable'; if ($this->files->get('picture')) { $picture = 'mimes:' . config('filesystems.mimes') . '|between:0,' . config('filesystems.max_size') * 1024 . '|dimensions:max_width=' . config('filesystems.max_width') . ',max_height=' . config('filesystems.max_height'); } $email = 'required|email:rfc,dns'; if (in_array($this->getMethod(), ['PATCH', 'PUT'])) { // Updating user if (is_numeric($this->user)) { $id = $this->user; $user = user_model_class()::find($id); $this->user = $user; } else { $id = $this->user->getAttribute('id'); } $companies = $this->user->can('read-common-companies') ? 'required' : ''; $roles = $this->user->can('read-auth-roles') ? 'required|string' : ''; if ($this->user->contact) { $email .= '|unique:contacts,NULL,' . $this->user->contact->id . ',id' . ',company_id,' . company_id() . ',type,customer' . ',deleted_at,NULL'; } } else { // Creating user $id = null; $companies = 'required'; $roles = 'required|string'; } $email .= '|unique:users,email,' . ($id ?? 'null') . ',id,deleted_at,NULL'; $change_password = $this->request->get('change_password') == true || $this->request->get('change_password') != null; $current_password = $change_password ? '|current_password' : ''; $password = $change_password ? '|confirmed' : ''; return [ 'name' => 'required|string', 'email' => $email, 'current_password' => 'required_if:change_password,true' . $current_password, 'password' => 'required_if:change_password,true' . $password, 'companies' => $companies, 'roles' => $roles, 'picture' => $picture, 'landing_page' => 'required|string', ]; } public function messages() { $picture_dimensions = trans('validation.custom.invalid_dimension', [ 'attribute' => Str::lower(trans_choice('general.pictures', 1)), 'width' => config('filesystems.max_width'), 'height' => config('filesystems.max_height'), ]); return [ 'picture.dimensions' => $picture_dimensions, ]; } }