Как сохранить тот же идентификатор при редактировании сообщения, будучи администратором, а не пользователем, которому принадлежит сообщение

У меня есть форум на моем веб-сайте, и когда я получаю к нему доступ с правами администратора и редактирую сообщение, которое я не делал, он меняет сохраненные данные с идентификатора пользователя на мой идентификатор администратора, следовательно, изменяя сообщение, как если бы я его сделал, а не другой человек. Я не знаю, как это изменить

Поскольку это мой первый веб-сайт, я не знаю, как изменить код. Я подумал, что мне может понадобиться оператор if, но у меня уже есть конструкция.

AdminController: 
        public function storepost(){
        {
        $user = Auth::user();

        // logged in?
        if (!$user) {
            request()->session()->flash('error', 'No permission!');
            return redirect('/');
        }

        // New post or edit old one
        if (request('id')) {
            $post = Post::find(request('id'));
        } else {
            $post = new Post();
        }

        $dummypost = new Post();
        $rules = $dummypost->rules();

        // every form filled in ?
        $validatedData = request()->validate($rules);

        // save post
        $post->title = $validatedData['title'];
        $post->description = $validatedData['description'];
        $post->user_id = $user->id;
        $post->save();

        //back to forum
        return redirect('admin/forum');
    }

я хочу редактировать сообщения, он меняет их на идентификатор 1, который является администратором. но у него был идентификатор 2 в базе данных. Я хочу, чтобы они оставались 2 даже после того, как я их отредактировал

Почему вы обновляете id в первую очередь?

Iftikhar uddin 24.01.2019 11:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
46
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Простой if check будет в порядке, обратите внимание, как в строке выше saving your post model вы назначаете user_id текущему вошедшему в систему пользователю, нам нужно ограничить это, чтобы назначать идентификатор только тогда, когда пользователь не Admin, поэтому измените эту строку на это:

if (/* Check if $user is not admin */) {
    $post->user_id = $user->id;
    //or if you have relationship and it's one to one
    $post->user()->associate($user);
}
$post->save();

Или, если вы не хотите обновлять user_id вашего сообщения каждый раз, когда вы редактируете это сообщение как Non admin user, вы можете полностью опустить эту строку, удалив/закомментировав ее.

...
// $post->user_id = $user->id;
// Or completely remove it
...

Ваше решение в порядке, НО зачем обновлять id снова и снова?

Iftikhar uddin 24.01.2019 11:24

Только что заметил его последнее предложение в посте после просмотра вашего комментария, вы правы, тогда я изменю ответ, спасибо

Nikola Gavric 24.01.2019 11:25

я просто использовал if (!$user->admin){$post->user_id =$user->id; Спасибо за помощь. Я все еще новичок в этом, и я был уверен, что это будет простое решение.

Law 24.01.2019 11:36

Добро пожаловать, также проверьте мой обновленный ответ, если вам не нужно обновлять user_id после создания post.

Nikola Gavric 24.01.2019 11:41

Как вы сказали, ваш идентификатор 1 является администратором, вы можете поставить условие, как показано ниже.

if ($user->id != '1'){
  $post->user_id = $user->id;
}

Он будет обновлять user_id только тогда, когда он не является администратором. Если у вас есть логический «параметр», код может выглядеть так

if ($user->YOURPARAMETER == 1){  //I Assume parameter would be is_admin
  $post->user_id = $user->id;
}

но разве это не означает, что как только придет другой админ с другим id, он не сможет редактировать сообщения? сообщения имеют user_id , и у меня есть другая таблица для пользователей с логическим значением для администраторов. так что в основном я мог бы использовать таблицу users-> admin, которая будет работать правильно?

Law 24.01.2019 11:32

о, если у вас есть логическое значение, тогда условие должно быть для этого параметра, а не для «id». Это отлично подойдет для вашего случая.

Vinod Joshi 24.01.2019 11:38
Ответ принят как подходящий

Итак, проблема заключалась в том, что, когда я редактировал пост, он изменил пользователя на меня (я был администратором), а не просто редактировал те части, которые мне нужны. Я исправил это с помощью оператора if:

if (!$user->admin){
            $post->user_id = $user->id;
        }

У меня было логическое значение в моей базе данных, которое вы можете увидеть с помощью admin.so оператор if просто говорит, что пользователь не является администратором,
опубликовать user_id как user_id.

Другие вопросы по теме