我正在使用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'));
}
答案 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"));
}