【问题标题】:Create Conditional Page View on Laravel by User Type按用户类型在 Laravel 上创建条件页面视图
【发布时间】:2016-02-29 12:08:18
【问题描述】:

有谁知道如何完成这项工作?我正在尝试在 Laravel 的路线中创造条件。如果是一种类型的用户(例如:Admin),Dashboard 页面将不同于其他类型的用户(例如:Client)。

在此处查看图片 ->http://screenshots.screencast-o-matic.com/screenshot/u/n5AH/1448537774091-31837.png

注意:它们应该位于相同的 URL domain.com/dashboard。将呈现给视图的页面必须反映登录用户的类型。

想法,有人吗?非常感谢!!

【问题讨论】:

标签: php laravel view routes laravel-5


【解决方案1】:

你不能用相同的路由指向两个动作,总是会调用最后一个动作,所以最好的方法是通过middleware

例如,您需要转到app/Http/Middleware 并创建一个class isAdministrator,它应该如下所示:

<?php

namespace TPS\Http\Middleware;

use Closure;
use Redirect;
use Illuminate\Contracts\Auth\Guard;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;

class IsAdministrator
{ 

    public function __construct(Guard $auth) {
        $this->auth = $auth;
    }

   /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle($request, Closure $next)
    {
        // I don't know how you verify that your user is an admin or not
        // but here we have a role wich can contain many roles
        if (! strpos($this->auth->user()->role, 'Administrateur')) {
            if ($request->ajax()) {
                return response('Forbidden.', 403);
            } else {
                // now here you will redirect to the normal user dashboard
                Redirect::route('user.dashboard');
            }
        }

        return $next($request);
    }
}

现在您需要注册您的中间件并为其命名,转到app/Http/Kernel.php 并将您的中间件添加到以下数组中:

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth'          => \TPS\Http\Middleware\Authenticate::class,
    'auth.basic'    => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest'         => \TPS\Http\Middleware\RedirectIfAuthenticated::class,
// I called it admin
    'admin'         => \TPS\Http\Middleware\IsAdministrator::class,
];

现在您可以像这样将此中间件附加到您的管理仪表板路由(您需要使用命名路由,当您需要更改一些 url 时会用到它):

Route::get('/dashboard', [
    'as' => 'admin.dashboard', 'uses' => 'PagesController@userType1'
]);

【讨论】:

    【解决方案2】:

    您可能不想在您的路线中这样做。您可能应该在控制器上执行此操作。

    假设你有一个 PageController@dashboard 方法

    public function dashboard() {
        if($user->admin) {
            return view('admin.dashboard');
        }
    
        return view ('user.dashboard');
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 2015-03-06
      • 2019-11-22
      • 1970-01-01
      • 2019-03-14
      • 2018-07-30
      • 2016-07-07
      • 1970-01-01
      相关资源
      最近更新 更多