如何在以管理员身份而非帖子所属的用户编辑帖子时存储相同的ID

时间:2019-01-24 10:18:42

标签: php laravel

我在我的网站上有一个论坛,当我通过管理员权限访问它并编辑我未发布的帖子时,它将存储的数据从用户ID更改为我的管理员ID,因此更改了该帖子,就好像我创建了该帖子一样另一个人。我不知道如何更改它

因为这是我的第一个网站,所以我不确定如何更改代码。 我想我可能想要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');
    }

我要编辑帖子,将其更改为ID 1(即admin)。但它在数据库中的ID为2。即使我编辑了它们,我也希望他们保持2

3 个答案:

答案 0 :(得分:1)

一个简单的if check就可以了,请注意如何在saving your post model上方的行中将user_id分配给当前登录的用户,我们需要限制该分配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
...

答案 1 :(得分:1)

所以问题是当我编辑帖子时,它把用户改为我(我是管理员),而不是只编辑我想要的部分。我用if语句解决了这个问题:

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

我的数据库中有一个布尔值,您可以通过admin查看。因此if语句只是说明如果用户不是admin,
将user_id作为user_id发布。

答案 2 :(得分:0)

正如您所说,您的ID 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;
}