如何在 Laravel 中实现管理面板和客户面板

Posted

技术标签:

【中文标题】如何在 Laravel 中实现管理面板和客户面板【英文标题】:How to implement both the Admin & Customer Panel in Laravel 【发布时间】:2019-10-01 08:28:08 【问题描述】:

**新蜜蜂

**Laravel

我想使用 URL http://127.0.0.1:8000/admin 访问管理面板,使用 URL http://127.0.0.1:8000/ 访问客户面板

Customer Login: http://127.0.0.1:8000/login

Admin Login: http://127.0.0.1:8000/admin/

我设置了一个会话变量来识别我的AdminController.php 中的用户是否是admin or customer,并检查该用户必须是管理员才能访问的每个功能。下面是脚本

AdminController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
use Session;

class AdminController extends Controller

    public function index() 
        return view('admin.index');
    

    public function login(Request $request) 
            
        Auth::attempt(['email' => $request->email, 'password' => $request->password, 'user_type' => 'admin']);

        //was any of those correct ?
        if ( Auth::check() ) 
            //send them where they are going 
            Session::put('userType', 'admin');
            return redirect()->route('admin.dashboard');
        

        return redirect('/admin')->with('flash_message', 'Invalid Credentials');
    

    public function dashboard() 
        if( Session::has('userType') and Session::get('userType') == 'admin' )
            return view('admin.dashboard');
        else
            return redirect('/admin')->with('flash_message', 'Please login to access');
    

    public function posts() 
        if( Session::has('userType') and Session::get('userType') == 'admin' )
            return view('admin.posts');
        else
            return redirect('/admin')->with('flash_message', 'Please login to access');
    

    public function logout() 
        Session::flush();
        return redirect()->route('admin');
    

我正在检查用户是否在像 if( Session::has('userType') and Session::get('userType') == 'admin' ) 这样的每个函数中都是管理员。那么有没有更好的方法呢??????

现在,当我登录到管理面板时,我也可以访问客户的 http://127.0.0.1:8000/home,但这不应该访问,因为我以管理员身份而不是客户身份登录。

现在如何为 2 种不同类型的用户启用会话变量并确保用户的可访问性???

web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () 
    return view('welcome');
);

Route::get('/home', 'HomeController@index')->name('home');

Auth::routes();

Route::get('/admin', 'AdminController@index')->name('admin');
Route::post('/admin/login', 'AdminController@login')->name('admin.login');
Route::get('/admin/dashboard', 'AdminController@dashboard')->name('admin.dashboard');
Route::get('/admin/posts', 'AdminController@posts')->name('admin.posts');
Route::get('/admin/logout', 'AdminController@logout')->name('admin.logout');

【问题讨论】:

我认为你应该阅读一些关于如何开发基于角色的身份验证的教程,即使用守卫或中间件等。你会找到更好的选择。 我同意 Gaurav Rai - 阅读一些教程。此外,您需要研究中间件,以便让您的控制器更薄。您应该将中间件应用于仅管理员路由并在那里检查正确的角色,而不是在所有控制器方法上添加相同的逻辑。 非常感谢您提供的信息,我一定会看看并尝试实现它。 嘿,我已经完成了,你能告诉我如何在使用 Laravel 的默认身份验证登录后设置会话吗?? 【参考方案1】:

您需要的是middleware 或某种第三方软件包,例如laratrsut

【讨论】:

以上是关于如何在 Laravel 中实现管理面板和客户面板的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中实现可扩展面板?

如何在R中实现对空间面板数据的LM检验

如何使用 laravel 5.1+ 在 web 应用程序中实现许可功能

Unity3D 在自定义脚本中实现Button组件上的OnClick面板

尝试登录 Prestashop 管理面板时出现严重的 WordPress 错误

Delphi自定义组件如何在属性面板中实现打开文件的对话框?