我正在尝试扩展Laravel-5.1 Auth中间件,以便我可以添加自己的方法:
@H_502_26@解决方法
验证:: hasRole()
这是我的路线文件:
/* Administrator Routes */ Route::group(['namespace' => 'Admin','middleware' => 'timesheets.admin:Administrator'],function() { Route::get('home','AdminController@index'); });
这是我的中间件文件:
<?PHP namespace App\Http\Middleware\Auth; use Closure; use Illuminate\Contracts\Auth\Guard; class AdminAuthenticate { /** * The Guard implementation. * * @var Guard */ protected $auth; /** * Create a new filter instance. * * @param Guard $auth * @return void */ 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,$role) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.',401); } else { return redirect()->guest('login'); } } if (auth()->check() && auth()->user()->hasRole($role)) { return $next($request); } } }
您可以尝试将以下内容添加到您的用户模型中: –
public function hasRole($role) { return User::where('role',$role)->get(); }
首先应检查User表是否具有“role”字段,然后根据角色字段检查参数$role.
您可以通过执行以下操作进行检查:
if( Auth::user()->hasRole($role) )
您可能需要根据需要调整示例.需要帮助请叫我.
/ – – – – – – 编辑 – – – – – – – – -/
如果您有两个单独的表,一个持有用户信息,另一个持有用户权限/角色,您可以向User模型添加另一个功能:
public function userID() { return $this->user_id; }
这将检查您是否有用户ID字段(如果有),它将返回经过身份验证的用户的ID.
public function hasRoles($userID,$roles) { return Your\User\Roles\Model::where('role',$role)->where('user_id',$user_id)->get(); }
您的中间件看起来像这样:
public function handle($request,$role) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.',401); } else { return redirect()->guest('login'); } } $userID = Auth::user()->userID(); if (auth()->check() && auth()->user()->hasRole($userID,$role)) { return $next($request); } }
如果我理解你想要什么.我相信这对你有用.