Laravel: 관리자로부터 신규 등록 사용자 승인
우리가 포괄할 내용:
laravel new laravel
그리고 저희를 설정해야 합니다.데이터베이스 인증서가 있는 env 파일입니다.이제 로그인/등록 링크를 생성합니다.
php artisan make:auth
따라서 다음 양식을 사용하여 로그인할 수 있습니다.users
DB 테이블의 경우 다음 두 필드를 추가해야 합니다.admin
(부울, 0/1) - 더 복잡한 역할/권한 논리 approved_at
(타임 스탬프, 비어 있음) - 따라서
php artisan make:migration add_admin_to_users_table
그리고 마이그레이션 자체:Schema::table('users', function (Blueprint $table) {
$table->boolean('admin')->default(false);
$table->timestamp('approved_at')->nullable();
});
또한 $fillable
모델의 app/User.php
그룹에 이 필드를 추가해야 합니다.protected $fillable = [
'name', 'email', 'password', 'admin', 'approved_at'
];
피드 설정 관리자 사용자
이 명령은 다음과 같은 작업을 지원합니다.
php artisan make:seeder AdminSeeder
database/seeds
폴더에 새 파일이 생성되며 다음과 같이 채워집니다.class AdminSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
\App\User::create([
'name' => 'Admin',
'email' => '[email protected]',
'email_verified_at' => now(),
'password' => bcrypt('verysafepassword'),
'admin' => 1,
'approved_at' => now(),
]);
}
}
마지막으로, 이 클래스를 주 database/seeds/DatabaseSeeder.php
파일에 추가해야 합니다.public function run()
{
$this->call(AdminSeeder::class);
}
이제 DB 구조를 실행할 준비가 되었습니다.php artisan migrate --seed
이때 인증서 [email protected]
-verysafepassword
으로 로그인하면 기본 Laravel의 빈 메인 대시보드를 볼 수 있습니다.대시보드에서 새 사용자 제한
네, 지금 우리는 새로운 사용자를 등록할 수 있지만, 비준을 받지 않을 것입니다.우리는 그들이 실제 계기판에 접근하는 것을 제한할 것이다.
우선, "승인 대기"와 같은 텍스트가 포함된 별도의 Blade 파일을 만듭니다.이것은 승인되지 않은 모든 사용자의 요청을 위한 페이지입니다.
따라서
resources/views/approval.blade.php
:@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Waiting for Approval</div>
<div class="card-body">
Your account is waiting for our administrator approval.
<br />
Please check back later.
</div>
</div>
</div>
</div>
</div>
@endsection
다음으로, 우리는 컨트롤러를 만들어서 그것을 가리킨다.또는, 사실 우리는 같은 HomeController
에서 하나의 방법을 만들었다.public function approval()
{
return view('approval');
}
다음은 모양입니다.마지막으로, 우리는 하나의 노선이 필요하다.
auth
중간부품에 넣겠습니다. routes/web.php
은 다음과 같습니다.Route::middleware(['auth'])->group(function () {
Route::get('/approval', 'HomeController@approval')->name('approval');
Route::get('/home', 'HomeController@index')->name('home');
});
승인되지 않은 사용자의 액세스 권한을 /home
URL로 제한해야 합니다.우리는 새로운 중간부품을 만들었다.php artisan make:middleware CheckApproved
app/Http/Middleware/CheckApproved.php
파일을 생성합니다.namespace App\Http\Middleware;
use Closure;
class CheckApproved
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->user()->approved_at) {
return redirect()->route('approval');
}
return $next($request);
}
}
이 미들웨어는 app/Http/Kernel.php
어레이의 $routeMiddleware
에 등록해야 합니다.protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
// ...
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'approved' => \App\Http\Middleware\CheckApproved::class,
];
마지막으로, 우리는 home
루트를 이 중간부품 아래의 블록에 추가합니다. 따라서 routes/web.php
은 이렇게 보입니다.Route::middleware(['auth'])->group(function () {
Route::get('/approval', 'HomeController@approval')->name('approval');
Route::middleware(['approved'])->group(function () {
Route::get('/home', 'HomeController@index')->name('home');
});
});
따라서 현재 모든 새 사용자는 로그인하거나 어떤 작업을 수행한 후에 approval page
으로 리디렉션됩니다.관리자에게 새 사용자를 알립니다.
우리는 프레임에 첨부된 Laravel Notifications 함수를 사용할 것이다.
새로운 알림 클래스를 생성합니다.
php artisan make:notification NewUser
그리고 새로 생성된 app/Notifications/NewUser.php
을 기입합니다.namespace App\Notifications;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class NewUser extends Notification
{
use Queueable;
private $new_user;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(User $new_user)
{
$this->new_user = $new_user;
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('New user has registered with email ' . $this->new_user->email)
->action('Approve user', route('admin.users.approve', $this->new_user->id));
}
}
여기에서는 다음 사항에 유의해야 합니다.__construct()
방법을 통해 새로운 등록 사용자를 대상으로 전달한 다음에 이를 국부적인 개인 변수로 전환할 것이다. 우리는 toMail()
방법에서 이 변수를 $this->new_user
으로 사용할 것이다.app/Http/Controllers/Auth/RegisterController.php
, 특히 방법 create()
을 확장합니다.// Don't forget to add this
use App\Notifications\NewUser;
// ...
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$admin = User::where('admin', 1)->first();
if ($admin) {
$admin->notify(new NewUser($user));
}
return $user;
}
이메일 발송을 테스트하기 위해 MailTrap을 사용하고 Laravel .env
파일에 인증서를 넣는 것을 추천합니다.MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=54043xxxxxxxxxx
MAIL_PASSWORD=a7d17xxxxxxxxx
MAIL_ENCRYPTION=null
따라서 모든 새 사용자에게 관리자는 다음과 같은 결과를 얻을 수 있다.관리자가 새 사용자 승인
이전 단계에서, 우리는
route('admin.users.approve', $this->new_user->id)
의 경로를 사용했는데, 지금 우리는 그것을 실제적으로 실현할 수 있다.실제로 사용자를 열거하고 그 중 하나를 승인하는 두 가지 방법이 필요합니다.
또한 관리자 사용자만 사용할 수 있기 때문에 다른 중간부품을 생성해야 합니다.
php artisan make:middleware CheckAdmin
우리는 새 파일 app/Http/Middleware/CheckAdmin.php
을 작성합니다.namespace App\Http\Middleware;
use Closure;
class CheckAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->user()->admin) {
return redirect()->route('home');
}
return $next($request);
}
}
또한 app/Http/Kernel.php
어레이에 추가해야 합니다.protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
// ...
'approved' => \App\Http\Middleware\CheckApproved::class,
'admin' => \App\Http\Middleware\CheckAdmin::class,
];
마지막으로, 이것은 우리의 최종 routes/web.php
버전입니다.Route::middleware(['auth'])->group(function () {
Route::get('/approval', 'HomeController@approval')->name('approval');
Route::middleware(['approved'])->group(function () {
Route::get('/home', 'HomeController@index')->name('home');
});
Route::middleware(['admin'])->group(function () {
Route::get('/users', 'UserController@index')->name('admin.users.index');
Route::get('/users/{user_id}/approve', 'UserController@approve')->name('admin.users.approve');
});
});
우리가 해야 할 마지막 일은 실제 비준을 실시하는 것이다.php artisan make:controller UserController
다음은 app/Http/Controllers/UserController.php
의 코드입니다.namespace App\Http\Controllers;
use App\User;
class UserController extends Controller
{
public function index()
{
$users = User::whereNull('approved_at')->get();
return view('users', compact('users'));
}
public function approve($user_id)
{
$user = User::findOrFail($user_id);
$user->update(['approved_at' => now()]);
return redirect()->route('admin.users.index')->withMessage('User approved successfully');
}
}
따라서 방법 approve()
은 사용자를 승인하고 목록으로 다시 정합니다.resources/views/users.blade.php
에서 구현:@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Users List to Approve</div>
<div class="card-body">
@if (session('message'))
<div class="alert alert-success" role="alert">
{{ session('message') }}
</div>
@endif
<table class="table">
<tr>
<th>User name</th>
<th>Email</th>
<th>Registered at</th>
<th></th>
</tr>
@forelse ($users as $user)
<tr>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->created_at }}</td>
<td><a href="{{ route('admin.users.approve', $user->id) }}"
class="btn btn-primary btn-sm">Approve</a></td>
</tr>
@empty
<tr>
<td colspan="4">No users found.</td>
</tr>
@endforelse
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
최종 시각적 결과:따라서 이것은 Laravel에서 새로운 사용자를 승인하는 가장 빠른 방법일 수 있습니다.간단하죠?
Reference
이 문제에 관하여(Laravel: 관리자로부터 신규 등록 사용자 승인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/povilaskorop/laravel-approve-new-registered-users-from-administrator-3nbh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)