![](/img/trans.png)
[英]How do I can say Laravel that if the thread belongs to this user, allow him to edit or delete the thread?
[英]How do I allow only admin to be able to delete/edit users informations using laravel?
我有一個儀表板,其中有多個用戶,我希望唯一的管理員能夠編輯或刪除用戶信息,普通用戶應該能夠編輯/刪除他的帳戶。
這是我迄今為止嘗試過的
管理員中間件
use Closure;
use Auth;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user() && Auth::user()->admin == 1) {
return $next($request);
}
return redirect('/home');
}
}
這是我顯示數據的 users.index 表體
<tbody>
@foreach($users as $user)
<tr>
<td>
{{ $user->name }}
</td>
<td>
{{ $user->email }}
</td>
<td>
{{ $user->created_at->format('Y-m-d') }}
</td>
<td class="td-actions text-right">
@if ($user->is_admin != auth()->id())
<form action="{{ route('user.destroy', $user) }}" method="post">
@csrf
@method('delete')
<a rel="tooltip" class="btn btn-success btn-link" href="{{ route('user.edit', $user) }}" data-original-title="" title="">
<i class="material-icons">edit</i>
<div class="ripple-container"></div>
</a>
<button type="button" class="btn btn-danger btn-link" data-original-title="" title="" onclick="confirm('{{ __("Are you sure you want to delete this user?") }}') ? this.parentElement.submit() : ''">
<i class="material-icons">close</i>
<div class="ripple-container"></div>
</button>
</form>
@else
<a rel="tooltip" class="btn btn-success btn-link" href="{{ route('profile.edit') }}" data-original-title="" title="">
<i class="material-icons">edit</i>
<div class="ripple-container"></div>
</a>
@endif
</td>
</tr>
@endforeach
表中的數據如下所示
#original: array:9 [▼
"id" => 2
"name" => "Royaladd"
"email" => "kaczkapojebana@gmail.com"
"email_verified_at" => null
"password" => "$2y$10$3SIVxXu/SyF0vdavnV.DTOcljEqlhAH5J6LV.KmCezdQ4XA11N5m."
"remember_token" => null
"created_at" => "2020-02-12 10:36:40"
"updated_at" => "2020-02-12 10:36:40"
"is_admin" => 0
]
不幸的是,上述解決方案任何用戶都可以編輯或刪除用戶信息。
我需要做什么才能實現我想要的?
我不知道你是如何設置 auth 和 user 通常當用戶登錄時,你的 auth 功能只設置用戶的基本信息,以及他是否登錄。
我假設你有 is_admin 作為一列是用戶表。
在您的用戶模型中,您需要有一個函數來檢查用戶是否為管理員,您是否擁有包含用戶 ID 的 Auth::id(),然后從查詢中檢查此用戶 ID 是否為管理員,並將其返回為 true false
public function isAdmin() {
$user= App\user::find(Auth::id());
// you can also put it in session
// this session line can add in handle function and call $user->is_admin()
$this->request->session()->put('is_admin', $user->is_admin);
return $user->is_admin; // you can add if check to return true false if you want
}
在你看來
@if ($user->is_admin()){
// everything here is only accessible if its true
}
附注。 可能有代碼錯誤,只是采取邏輯
確保您在數據庫用戶表中有角色列或屬性。 像這樣創建一個中間件
php artisan make:middleware AuthMiddleware
然后
public function handle($request, Closure $next)
{
if (\Auth::user()->role == 'admin') {
return $next($request);
}
return redirect('home');
}
在你的內核中
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'admin' => \App\Http\Middleware\YourMiddleware::class,
保護您的路線
Route::get('admin/profile/{id}/delete', function () {
//
})->middleware('admin');
希望這可以幫助
public function handle($request, Closure $next)
{
if (Auth::user() && Auth::user()->is_admin == 1) {
return $next($request);
}
您正在檢查Auth::user->admin == 1
請根據您的Auth::user()
數據將此條件更改為Auth::user()->is_admin == 1
在您的網絡路由中,通過將您的管理中間件包裝在一個中間件組中,將您的管理中間件應用於您的用戶刪除和編輯路由。
// -- admin --
Route::middleware(['admin'])->group(function () {
這意味着只有管理員才能訪問這些路由,否則用戶將被重定向。 如果經過身份驗證的用戶與您傳遞給路由的用戶相同,那么您可以編輯您的管理中間件以接受請求?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.