Laravel 8 및 9 사용자 가장 예제

원래 게시된 @https://codeanddeploy.com 방문하여 샘플 코드 다운로드: https://codeanddeploy.com/blog/laravel/laravel-8-user-impersonation-example

이 게시물에서는 Laravel 8 및 9 사용자 가장을 구현하는 방법을 공유하고 있습니다. 일반적으로 이 기능을 사용하여 관리자를 대신하여 로그인합니다. 사용자 가장은 사용자에게 액세스하고 계정에서 수행한 작업을 확인하려는 사용자를 관리할 때 유용합니다.

이렇게 하면 보안 문제와 사용자의 개인 정보가 유출될 수 있으므로 주의해야 합니다. 따라서 올바르게 구현된 경우 코드를 다시 확인해야 합니다.





이 튜토리얼을 간단히 하기 위해 이미 인증 및 역할이 있는 이전 코드를 사용하고 있습니다. 사용하려는 경우 볼 수 있습니다here.

1단계: 패키지 설치



404labfr Laravel impersonate 패키지를 사용하고 있습니다. 로컬 프로젝트에 다음 명령을 실행합니다.

composer require lab404/laravel-impersonate


2단계: 사용자 모델 설정



사용자 모델에 이 Impersonate를 사용하십시오. 전체 모델 코드는 아래를 참조하십시오.

<?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단계: 컨트롤러



아래의 다음 메소드를 UsersController에 추가하십시오.

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


새 경로를 권한으로 등록합니다.

그리고 이 "users.leave-impersonate"에 대한 권한을 사용자 역할에 추가하는 것을 잊지 마십시오. 관리자가 가장을 종료하려는 경우 일반 사용자가 해당 경로에 액세스할 수 있습니다.

또한 이러한 권한을 관리자 역할(users.impersonate, users.leave-impersonate)에 추가하는 것을 잊지 마십시오.

이 튜토리얼이 도움이 되었으면 합니다. 이 코드를 다운로드하려면 여기https://codeanddeploy.com/blog/laravel/laravel-8-user-impersonation-example를 방문하십시오.

좋은 웹페이지 즐겨찾기