如何为用户分配中间件?我只是按照laravel 5.2的指南,但我无法想象...... 我能够创建中间件(我有管理中间件)
<?php
namespace App\Http\Middleware;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
我可以将中间件分配给路由
Route::group(['middleware' => ['auth', 'admin']], function () {
Route::resource('admin/tasks', 'Admin\\TasksController');
});
但我如何检查用户是否是管理员?我只是按照laravel 5.2上的文档进行身份验证,但我不知道如何仅为“admin”中间件访问该页面...
答案 0 :(得分:2)
问题1 如何检查用户是否为管理员
我认为使用session
是一个很好的解决方案。您可以将用户状态存储在会话中。在Admin
中间件中,您可以if (session('statut') === 'admin')
检查用户是否为管理员。
问题2 用户页面访问
return $next($request);
return new RedirectResponse(url('/'));
以下代码可能会对您有所帮助。
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\RedirectResponse;
class Admin {
public function handle($request, Closure $next)
{
if (session('statut') === 'admin')
{
return $next($request);
}
return new RedirectResponse(url('/'));
}
}
答案 1 :(得分:1)
我有一个小例子,非常简单
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;
class Authenticate
{
/**
* The authentication guard factory instance.
*
* @var \Illuminate\Contracts\Auth\Factory
*/
protected $auth;
/**
* Create a new middleware instance.
*
* @param \Illuminate\Contracts\Auth\Factory $auth
* @return void
*/
public function __construct(Auth $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ($this->auth->guard($guard)->guest()) {
return response('Unauthorized.', 401);
}
return $next($request);
}
}
如果您只有访客和管理员(在您的系统中经过身份验证),您应该像上面那样做。但是,如果您有其他角色,则必须附加ACL(对于前https://github.com/Zizaco/entrust)
答案 2 :(得分:1)
我建议您使用ENTRUST Laravel package
Entrust是一种添加基于角色的权限的简洁灵活的方法 到Laravel 5。