У меня есть форум на моем веб-сайте, и когда я получаю к нему доступ с правами администратора и редактирую сообщение, которое я не делал, он меняет сохраненные данные с идентификатора пользователя на мой идентификатор администратора, следовательно, изменяя сообщение, как если бы я его сделал, а не другой человек. Я не знаю, как это изменить
Поскольку это мой первый веб-сайт, я не знаю, как изменить код. Я подумал, что мне может понадобиться оператор 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 даже после того, как я их отредактировал






Простой 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 снова и снова?
Только что заметил его последнее предложение в посте после просмотра вашего комментария, вы правы, тогда я изменю ответ, спасибо
я просто использовал if (!$user->admin){$post->user_id =$user->id; Спасибо за помощь. Я все еще новичок в этом, и я был уверен, что это будет простое решение.
Добро пожаловать, также проверьте мой обновленный ответ, если вам не нужно обновлять user_id после создания post.
Как вы сказали, ваш идентификатор 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, которая будет работать правильно?
о, если у вас есть логическое значение, тогда условие должно быть для этого параметра, а не для «id». Это отлично подойдет для вашего случая.
Итак, проблема заключалась в том, что, когда я редактировал пост, он изменил пользователя на меня (я был администратором), а не просто редактировал те части, которые мне нужны. Я исправил это с помощью оператора if:
if (!$user->admin){
$post->user_id = $user->id;
}
У меня было логическое значение в моей базе данных, которое вы можете увидеть с помощью admin.so оператор if просто говорит, что пользователь не является администратором,
опубликовать user_id как user_id.
Почему вы обновляете
idв первую очередь?