public function guardFieldsByPolicy($fix, $fix_is_prefix = true, $delimiter = '.', $fields = null, $user = null)
    {
        if ($this->guarded == ['*']) {
            return $this;
        }

        if (!$fields) {
            $fields = $columns = Schema::getColumnListing($this->getTable());
        }

        if (!$user) {
            $user = \Auth::user();
        }

        $current_guarded = $this->guarded ?: [];
        foreach ($fields as $field) {
            // Apply the prefix/suffix
            $field_ability = ($fix_is_prefix) ? $fix.$delimiter.$field : $field.$delimiter.$fix;
            if (!$this->isGuarded($field) && $user->cannot($field_ability, app(Request::class))) {
                array_push($current_guarded, $field);
            }
        }
        $this->guard($current_guarded);

        return $this;
    }