수준별 - 관리자 로그인

Laravel-Pemision을 사용하여 관리자, 관리 그룹을 쉽게 설정할 수 있습니다.


여기서 로그인 화면을 고객용과 관리자용으로 나누어 보세요.
사용자 정의 Auth
· 사용자 role을 통해/login/{enter_role}을 판단합니다.
· 인증 후, enter_롤과 사용자 롤이 일치하지 않으면 강제로 로그아웃합니다.
Laravel5.5 및 Laravel6.0이 검증되었습니다.
Laravel-Pemision 설치가 필요합니다.
・ 덮어쓰는 방법, 소스 코드 확인을 통한 이해 향상!
사용자 정의 감사
App/Http/Controllers/Auth/LoginController.php
//追加
use Illuminate\Http\Request;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Support\Facades\Auth;
---
class LoginController extends Controller
{
---
    use AuthenticatesUsers;
    //オーバーライド
    protected function redirectTo() {
        if (auth()->user() !== null && auth()->user()->hasRole('admin')) {
            return route('home');
        } else {
            return route('welcome');
        }
    }                                           
    //オーバーライド
    public function showLoginForm($role = null)
    {
        session(['enter' => $role]);
        return view('auth.login');
    }
    //オーバーライド
    protected function authenticated(Request $request, $user) {
        $role = $user->getRoleNames('items')[0];
        $is_customer_login = (session('enter') == null && $role == 'customer');
        $is_role_login = (session('enter') == $role);
        if ($is_customer_login || $is_role_login) {
            //
        } else {
            Auth::logout();
        }
    }
}
app/Http/Controllers/Auth/RegisterController.php
//追加
use Spatie\Permission\Traits\HasRoles;
---
class RegisterController extends Controller
{
---
    //オーバーライド
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
        //デフォルト: role = 'customer'
        $user->assignRole('customer');
        return $user;
    }
}
라우팅 설정
routes/web.php
//ログイン後のリダイレクト先
Route::get('/', function () {
    return view('welcome');
});
Route::get('/home', 'HomeController@index')->name('home');
//追加
Route::get('/login/{role?}', 'Auth\LoginController@showLoginForm');
화면 색상 설정 (레이아웃)
resources/views/layouts/app.blade.php
    //追加変更
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
        @if (session('enter') !== null)
            <style>body{background-color: tomato;}</style>
        @endif
---
    <!-- Authentication Links -->
    @guest
        @if (session('enter') == null)
            <li><a href="{{ route('login') }}">Login</a></li>
            <li><a href="{{ route('register') }}">Register</a></li>
        @endif
    @else 
--
    @endguest
---
로그인 후 화면 표시
resources/views/home.blade.php
---
    //変更
    <div class="panel-body">
        @role('admin')
            <div class="alert alert-success">管理者様
        @endrole
        @role('customer')
            <div>お客様
        @endrole
        のログインです</div>
    </div>

동작 확인


Laravel5.5 + Laravel-Permission-v2
Laravel6.0 + Laravel-Permission-v3
사용자 데이터는 Laravel-Pemision 설치 참조.
고객 사용자
/login-> 로그인

관리자 사용자
/login/admin-> 로그인

새 사용자가customer로 등록되었습니다.
관리자 등은 tinker나seed로 등록하십시오.
당신의 의견을 지적해 주십시오.

좋은 웹페이지 즐겨찾기