Laravel 5 - разрешить регистрацию только после авторизации и для администраторов
Я пытаюсь настроить страницу регистрации Laravel, чтобы /register была доступна только в том случае, если:
USER
→IS AUTHENTICATED
знак равноTRUE
А ТАКЖЕ
USER
→TYPE
знак равноSTAFF
" (хранится в базе данных)
Какой файл необходимо изменить, чтобы штатные пользователи могли регистрировать новых пациентов? В этом случае публичная регистрация будет отключена для обычных / пациентов пользователей.
1 ответ
Это предполагает, что вы используете встроенную аутентификацию, но для первой части вы хотите добавить промежуточное ПО аутентификации в конструктор вашего RegisterController (app/Http/Controllers/Auth)
public function __construct()
{
$this->middleware('auth');
}
Это потребует от пользователя аутентификации перед регистрацией
Что касается второй части... это в значительной степени зависит от того, как вы хотите контролировать вещи, но лучший способ, который я бы сказал, это посмотреть на https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/13
Я последовал этому, чтобы настроить мой, довольно прямой и намного более чистый способ справиться с этим ИМО
Чтобы изменить файлы аутентификации, которые поставляются с Laravel...
Для начала отключите автоматический вход после регистрации, чтобы вошедший в систему штатный пользователь не сразу переключился на нового зарегистрированного пользователя-пациента. Переопределить register() в вашем RegisterController (app/Http/Controllers/Auth
) с этим:
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());
}
Вы делаете это, чтобы пропустить одну строчку, $this->guard()->login($user);
, который находится в исходном регистре RegisterController().
Затем вам нужно будет создать новое промежуточное программное обеспечение для перенаправления пользователей, если они переходят в представление реестра, но не являются сотрудниками. Использовать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']);
}
Регистрация теперь должна быть недоступна для гостей и пользователей, не являющихся сотрудниками! Я реализовал нечто подобное в своем собственном проекте, дайте мне знать, если что-то не так.