ララベル8と9ユーザー偽装例


もともとhttps://codeanddeploy.com訪問し、サンプルコードをダウンロードしてください
このポストでは、私はどのようにララベル8と9ユーザーの偽装を実装する共有しています.通常、管理者のユーザーのためにログインするには、この機能を使用します.ユーザの偽装は、ユーザーにアクセスしたいユーザーを管理し、アカウントで何をしたかをチェックするときに便利です.
注意してくださいそれはあなたのセキュリティの問題とあなたのユーザーのプライバシーを与えることができるので注意しなければならない.したがって、正しく実装されている場合は、コードをダブルチェックする必要があります.
https://codeanddeploy.com/blog/laravel/laravel-8-user-impersonation-example

このチュートリアルを短縮するには、既に認証とロールを持っている以前のコードを使用しています.あなたはそれを使用する場合は、を見ることができます.

ヒア ステップ1 :パッケージのインストール


私は のパッケージを使用しています.ローカルプロジェクトに次のコマンドを実行します.
composer require lab404/laravel-impersonate

404 Labavel偽装 ステップ2 :セットアップユーザモデル


あなたのユーザーモデルに、この偽装を使用してください.モデル全体のコードを参照ください.
<?php

namespace App\Models;

use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Notifications\Notifiable;
use Lab404\Impersonate\Models\Impersonate;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, HasRoles, Impersonate;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'username',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
     * Always encrypt password when it is updated.
     *
     * @param $value
     * @return string
     */
    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }
}

ステップ3:ルート


ルートの2行を追加します.下記の例を参照ください.
Route::get('/{user}/impersonate', 'UsersController@impersonate')->name('users.impersonate');
Route::get('/leave-impersonate', 'UsersController@leaveImpersonate')->name('users.leave-impersonate');

注意:許可されていないロールに対してアクセスできない場合は、このルートを制限する必要があります.

ステップ4:コントローラ


以下のメソッドをユーザーコントローラに追加します.
public function impersonate(User $user) 
{
    auth()->user()->impersonate($user);

    return redirect()->route('home.index');
}

public function leaveImpersonate() 
{
    auth()->user()->leaveImpersonation();

    return redirect()->route('home.index'); 
}

ステップ5 :表ユーザ一覧


テーブルユーザーリストのインデックスブレードファイルで次のコードを追加します.
@role('Admin')
     <td>
           @if($user->id != auth()->id())
               <a href="{{ route('users.impersonate', $user->id) }}" class="btn btn-warning btn-sm">Impersonate</a>
           @endif
     </td>
@endrole
上記のように管理者だけがこの列を見ることができます.

ステップ6:Navbar刃(偽装を残す)


あなたのNavbarにメニューとあなたが好きなものを置くことができます.ユーザーの偽装を残す.以下のサンプルコードを参照ください.
@auth
    <div class="text-end">
          @if(session('impersonated_by'))
            <a href="{{ route('users.leave-impersonate') }}" class="btn btn-outline-light me-2">Leave Impersonation</a>
          @endif
    </div>
@endauth
注意:前のチュートリアルを使用している場合は、以下のコマンドを実行することを忘れないでください.
php artisan permission:create-permission-routes
新しいルートをパーミッションとして登録します.
そして、このユーザーのために許可を加えるのを忘れないでください.そして、管理者が偽装を残したいなら、通常のユーザーがそのルートへのアクセスを持っているように、あなたのユーザ役割に「偽装してください」.
また、これらの権限を管理者ロールに追加することを忘れないでください.
私はこのチュートリアルを助けることを望む.あなたがこのコードをダウンロードしたいならば、親切に をここで訪問してください.