【问题标题】:Laravel Multi-role unable to create in laravel 5Laravel 多角色无法在 laravel 5 中创建
【发布时间】:2015-06-27 01:04:40
【问题描述】:

我在 laravel5 中创建多角色应用程序时遇到了麻烦,因为在 laravel 5 中,身份验证是预定义的,所以我不愿意乱用 laravel 5 身份验证的预定义代码。我有一个构造函数来验证我的项目中的每个控制器,但我无法检查以下角色的用户角色:-

 1. Admin
 2. Agent
 3. User

我可以手动检查每个函数,但这不是这样做的正确过程,如果我总共有大约 500 个函数,我不能进入每个函数并手动定义。请任何帮助

谢谢

【问题讨论】:

  • 您没有清楚地了解自己在做什么,是 500 条路线有 20 个角色还是什么?但可能您正在寻找的是使用路由过滤器来帮助组织它,看看 Zizaco:entrust 即使您不使用该服务也可能是示例将帮助您开发一个路由过滤器或其他适合您的答案项目。
  • 不同用户有三种角色。问题中提到了角色。我只想为不同的用户创建三级身份验证->角色。

标签: authentication laravel-5 roles


【解决方案1】:

我个人会使用中间件和路由组来完成任务,这类似于 Laravel 检查用户身份验证的方式。

您只需要确定何时需要运行中间件,这可以通过嵌套 Route::group 或从控制器注入中间件来完成。

因此,对于嵌套的示例,您可以在路由文件中包含以下内容:

Route::group(['middleware' => ['auth']], function () {

  Route::get('dashboard', ['as' => 'dashboard', function () {
      return view('dashboard');
  }]);    


  Route::group(['prefix' => 'company', 'namespace' => 'Company', 'middleware' => ['App\Http\Middleware\HasRole'], function () {

      Route::get('dashboard', ['as'=>'dashboard', function () {
          return view('company.dashboard');
      }]);
      Route::resource('employees', 'EmployeesController');
      ...
      ...
  });

});

或者您可以像这样将中间件注入您的控制器:

use Illuminate\Routing\Controller;

class AwesomeController extends Controller {

    public function __construct()
    {
        $this->middleware('hasRole', ['only' => 'update'])
    }

}

然后使用php artisan make:middleware HasRole 之类的东西添加一个或多个中间件文件,这将为您提供中间件样板,然后您可以添加角色检查逻辑:

<?php namespace App\Http\Middleware;

use Closure;

class HasRole {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
     if($request->is('admin/*')){

        [******ADD YOUR LOGIC HERE TO DETERMINE THE ROLE ******]
        [******YOU CAN ALSO INCLUDE ANY REDIRECTS IF NECESSARY******]

      }         
     return $next($request);
    }

}

请注意,我使用$route-&gt;is('admin/*') 过滤任何路由作为进一步过滤请求的示例,如果您从控制器注入中间件,您可能不会包含这些请求。

但如果用户通过了所需的角色检查,您无需执行任何操作,他们将被允许继续查看。如果他们未能通过角色检查,您可以相应地进行处理,但请注意不要让他们陷入失败的权限循环。

我想您已经了解了它的要点,请随时查看Laravel middleware docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2017-06-08
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2020-08-08
    相关资源
    最近更新 更多