Laravel 5 - разрешить регистрацию только после авторизации и для администраторов

Я пытаюсь настроить страницу регистрации Laravel, чтобы /register была доступна только в том случае, если:

  • USERIS AUTHENTICATED знак равно TRUE

А ТАКЖЕ

  • USERTYPE знак равно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']);
    }

Регистрация теперь должна быть недоступна для гостей и пользователей, не являющихся сотрудниками! Я реализовал нечто подобное в своем собственном проекте, дайте мне знать, если что-то не так.

Другие вопросы по тегам