现在这是我当前的HTML - 或者更好的剪辑它:
@if( Auth::check())
<div class="panel-footer">
{!! Former::horizontal_open()->method('DELETE')->action(action("Test\\TestController@destroy", $thread->id))->id('conf') !!}
{!! Former::danger_submit('Delete') !!}
{!! Former::close() !!}
<a href="{{ URL::route('edit', $thread->id) }}">
<div class="btn btn-primary">Edit</div>
</a>
</div>
@endif
</div>
<a href="#">
<div class="btn pull-right"><a href="{{ action('Test\\TestController@index') }}">Go back</a></div>
</a>
所以这只是检查用户是否登录,如果没有,他没有看到编辑/删除按钮。如果他已经登录,他当然会看到他们。
现在我需要一个代码来说明他是否与写线程相同,然后允许他编辑/删除它。
好吧,我真的不知道怎么做到这一点,而且我还没有找到适合自己的东西..
我有两个型号。一个用于所有线程,一个用于所有用户。
我在我的线程模型中做了'belongsTo',并说它属于我的用户表中的name属性。
线程模型:
<?php
namespace App\Models\Thread;
use Illuminate\Database\Eloquent\Model;
class Thread extends Model {
public $table = 'thread';
public $fillable = [
'thread',
'content',
];
public function user() {
return $this->belongsTo(User::class, "name");
}
}
用户模型:
<?php
namespace App\Models\Thread;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
public $table = 'users';
public $fillable = [
'name',
];
}
好吧..我被卡住了,我希望有人可以帮我这个。
感谢您的帮助和支持
我可以帮助的其他代码部分:
Route::get('/show/{id}', 'Test\\TestController@show');
Route::get('/show/{id}/edit', 'Test\\TestController@edit')->name('edit');
Route::put('/show/{id}/edit', ['as' => 'editing', 'uses' => 'Test\\TestController@update']);
Route::delete('/show/{id}', 'Test\\TestController@destroy')->name('destroy');
这就是我必须展示线程的所有路线,或删除/编辑线程
控制器:这是show函数,它通过按钮为我提供视图:
public function show($id)
{
$thread = Thread::query()->findOrFail($id);
return view('test.show', [
'thread' => $thread,
]);
}
答案 0 :(得分:1)
您可以使用Laravel的ability系统。
或者在控制器中编辑线程时,您可以执行以下操作:
$thread = Thread::findOrFail($thread_id);
if (!Auth::check() &&
$thread->user()->first()->id != Auth::user()->id) {
abort(404); // Stop the user
} else {
// Edit the threat
}
编辑您的编辑:
这对你有用吗?
public function show($id)
{
$thread = Thread::findOrFail($id);
if (!Auth::check() &&
$thread->user()->first()->id != Auth::user()->id) {
abort(404); // Stop the user
}
return view('test.show', [
'thread' => $thread,
]);
}
答案 1 :(得分:1)
我认为做你想做的最好的方法是使用请求类。您只需要创建一个新的请求:
<?php
namespace App\Http\Requests;
/** Remember to include here the classes you are using,
* in your case it would be something like this:
*/
use App\Models\Thread;
use Auth;
class EditThreadRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
/**
* You can get the thread id from your view
* using for example a hidden input
* {!! Form::hidden('id', $thread->id) !!}
*/
$thread = Thread::findOrFail($this->get('id'));
return $thread->user->id === Auth::user()->id;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// Your validation rules
];
}
}
如果线程属于该用户,则上述函数将返回true,允许用户继续请求。
在此之后,您只需要在编辑功能中包含新创建的请求,它将自动检查用户是否可以编辑线程:
public function edit (EditThreadRequest $request)
{
// Your code
}
希望这有帮助!