Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何允许管理员使用laravel删除/编辑用户信息?_Php_Html_Laravel_Authentication_Laravel Blade - Fatal编程技术网

Php 如何允许管理员使用laravel删除/编辑用户信息?

Php 如何允许管理员使用laravel删除/编辑用户信息?,php,html,laravel,authentication,laravel-blade,Php,Html,Laravel,Authentication,Laravel Blade,我有一个仪表板,其中我有多个用户,我想唯一的管理员能够编辑或删除用户信息,普通用户应该能够编辑/删除他的帐户 这是我到目前为止所做的尝试 管理中间件 use Closure; use Auth; class IsAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next

我有一个仪表板,其中我有多个用户,我想唯一的管理员能够编辑或删除用户信息,普通用户应该能够编辑/删除他的帐户

这是我到目前为止所做的尝试

管理中间件

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
不幸的是,上述解决方案任何用户都可以编辑或删除用户信息


我需要做什么才能实现我想要的?

确保数据库用户表中有角色列或属性。创建这样的中间件

php artisan make:middleware AuthMiddleware
然后

在内核中

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
,我不知道您是如何设置Auth和user的 通常,当用户登录时,您可以使用auth功能仅设置用户基本信息以及用户是否登录

我假设您有is_admin,因为列是user表

在您的用户模型中,您需要有一个功能来检查用户是否是管理员 您拥有包含用户id的Auth::id(),然后从查询中检查此用户id是否为admin或no,并将其返回为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
 }

另外,可能会有代码错误,只需将web路由中的逻辑应用到您的管理中间件,并将其包装到中间件组中,即可删除和编辑路由

// -- admin --
Route::middleware(['admin'])->group(function () {

这意味着只有管理员才能访问这些路由,否则用户将被重定向。然后,如果经过身份验证的用户与通过路由的用户相同,您可以编辑管理中间件以接受请求。

当然,测试应该是
@if($user->is\u admin)
您比较错误,is\u admin和auth id不同。只需使用is_admin或true或1@RiggsFolly您的解决方案现在普通用户可以编辑或删除管理员帐户,而不是他的帐户:(那么,
var\u dump($user->is\u admin)是什么呢
show,请添加到问题中问题是,$user->is_admin对于循环中的每个记录,您需要获取登录用户的is_admin检查,并且在users.index上?@user9964622在users.index路由::get('admin/profile/index',function(){/});那么users.index呢?
 @if ($user->is_admin()){
   // everything here is only accessible if its true
 }
// -- admin --
Route::middleware(['admin'])->group(function () {