Laravel 5 - 仅在Auth和Admins之后允许注册

时间:2017-02-12 16:04:08

标签: php laravel laravel-5 laravel-authorization

我正在尝试设置Laravel注册页面,以便/ register仅在以下情况下可用:

  • USERIS AUTHENTICATED = TRUE

  • USERTYPE =“STAFF”(存储在数据库中)

需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。

2 个答案:

答案 0 :(得分:0)

这假设您使用的是内置身份验证,但是对于第一部分,您希望将auth中间件添加到RegisterController的构造函数(app / Http / Controllers / Auth)

public function __construct()
{
    $this->middleware('auth');
}

这将要求在登记注册之前对用户进行身份验证

对于第二部分......这在很大程度上取决于你想如何控制事物,但最好的方式是看看https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/13

我跟着它来设置我的,非常直接和更清洁的方式来处理这个imo

答案 1 :(得分:0)

要修改Laravel随附的身份验证文件...

对于初学者,请在注册后禁用自动登录,以使登录的员工用户不会立即切换到新注册的患者用户。使用以下方法在RegisterController(app/Http/Controllers/Auth)中覆盖register():

public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    return $this->registered($request, $user)
           ?: redirect($this->redirectPath());
}

您这样做是为了在原始RegisterController register()中保留一行$this->guard()->login($user);

然后,如果用户进入注册视图但不是工作人员,则需要创建一个新的中间件来重定向用户。使用php artisan make:middleware IsStaff在您的app/Http/Middleware目录中创建一个新类:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class IsStaff
{

    public function handle($request, Closure $next)
    {   
        if (auth()->user()->type != 'Staff') {
            return redirect('home');
        }

        return $next($request);
    }

}

您需要在app/Http/Kernel.php中注册新的中间件:

protected $routeMiddleware = [
    'isStaff' => \App\Http\Middleware\IsStaff::class,
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];

回到RegisterController,同时使用内置的身份验证中间件和新的IsStaff中间件:

public function __construct()
    {
        $this->middleware(['auth', 'isStaff']);
    }

现在,非工作人员的访客和用户将无法访问注册!我已经在自己的项目中实现了类似的功能,让我知道是否有问题。