如果说线程属于这个用户,我怎么说Laravel,让他去

时间:2016-03-07 08:40:35

标签: php multithreading laravel

我正在使用Laravel Framework做博客,我已经有了一个登录/注册和一个帖子部分。在我的博客中你可以编辑一个线程,如果你已经登录。现在我有一个问题,如果我登录,我可以编辑和删除每个线程。如果它是我的主题或者是否来自其他用户并不重要。那么现在我需要一些东西来说我的laravel代码,我只是允许编辑/修改我自己的线程。

我发现了这个:https://laravel.com/docs/5.2/authorization#defining-abilities

但我真的不明白我是如何将这个实现到我的代码中的。我的数据库中是否需要任何参考?喜欢这个用户属于这个帖子?

嗯,我在laravel中有点新意。我希望有人可以帮助我

PS:我很抱歉我的英语不好,我来自德国。

编辑/更新/删除功能:

public function edit($id)
    {
        $thread = Thread::query()->findOrFail($id);
        return view('test.edit', [
            'thread' => $thread
        ]);
    }

    public function update($id, StoreRequest $request)
    {
        $thread = Thread::query()->findOrFail($id);
        $thread->fill($request->all());
        $thread->save();
        return redirect(action('Test\\TestController@show', [$thread->id]));
    }

    public function destroy($id)
    {
        $thread = Thread::query()->findOrFail($id);
        $thread->delete();
        return redirect(action("Test\\TestController@index"));
    }

我的线程模型:

public function user() {
    return $this->belongsTo(User::class, "name");
}

我如何添加新帖子:

如果我按"添加线程"我正在我的控制器中定向到我的添加功能:

添加功能:

public function add()
    {
        return view('test.add', [
            'entries' => Thread::query()->get()
        ]);
    }

在我的add.blade中我有我的公式,这个公式指导我到我的"存储功能"在我的控制器中:

商店功能:

public function store(StoreRequest $request)
    {
        Thread::create($request->all());
        return redirect(action('Test\\TestController@index'));
    }

1 个答案:

答案 0 :(得分:1)

您可以将user_id附加到线程,以便在您想要更新或删除任何时候检查当前登录用户是否携带该user_id,然后您做相应的操作。

user_id 添加到主题

然后在你的保存功能()中执行此操作。

public function save(Request $request){
    $thread = new Thread;
    $thread->user_id = Auth::user()->id;
    // rest of fields goes here
    $thread->save(); 
}

然后在你的编辑,更新或删除功能

public function edit($id)
{
    $thread = Thread::query()->findOrFail($id);

    // You can use laravel authorization/policies to achieve this too
    if($thread->user_id != Auth::user()->id){
       // Return to view with your custom error message telling 
       // the user he is not authorized to edit this thread 
    }

    return view('test.edit', [
        'thread' => $thread
    ]);
}

public function update($id, StoreRequest $request)
{
    $thread = Thread::query()->findOrFail($id);

    // You can use laravel authorization/policies to achieve this too
    if($thread->user_id != Auth::user()->id){
       // Return to view with your custom error message telling 
       // the user he is not authorized to edit this thread 
    }

    $thread->fill($request->all());
    $thread->save();
    return redirect(action('Test\\TestController@show', [$thread->id]));
}

public function destroy($id)
{
    $thread = Thread::query()->findOrFail($id);

    // You can use laravel authorization/policies to achieve this too
    if($thread->user_id != Auth::user()->id){
       // Return to view with your custom error message telling 
       // the user he is not authorized to delete this thread 
    }

    $thread->delete();
    return redirect(action("Test\\TestController@index"));
}