Ограничить логин пользователя определенным периодом времени - PullRequest
0 голосов
/ 02 ноября 2019

Я делаю офисное приложение и хочу ограничить вход пользователя только в рабочее время. но админ залогинится в любое время

Ответы [ 3 ]

1 голос
/ 02 ноября 2019

Возможное решение может выглядеть следующим образом:

<?php

namespace App\Http\Middleware;

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

class CheckTime
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $timezone = 'Europe/London';
        $start = Carbon::parse('12:00:00', $timezone);
        $end = Carbon::parse('16:00:00', $timezone);
        $now = Carbon::now($timezone);

        // here you can check if user is NOT admin
        if (!Auth::check()) {

            // check if current route is NOT login to avoid infinite loops in my case
            // and check if request takes place outside working hours
            if (Route::currentRouteName() != "login" && ($now->lte($start) || $now->gte($end))) {
                // Here you can react to the case, if user is not an admin
                // and is not in working time on the site
                // in my case this is a redirect to login
                return redirect()->route('login');
            }
        }

        return $next($request);
    }
}

1 голос
/ 02 ноября 2019

Вы можете сделать свое собственное промежуточное программное обеспечение для этого.

Например,

namespace App\Http\Middleware;

use Closure;

class CheckTime
{
    public function handle($request, Closure $next)
    {
        if (!isAllowedTime()) {
            // reject user access
        }

        return $next($request);
    }
}

Ознакомьтесь с официальным документом для получения дополнительной информации

0 голосов
/ 02 ноября 2019

Это работа для меня,

Я делаю промежуточное ПО под названием CheckTime, а в middleware проверяю пользователя is_admin, затем пропускаю, если нет, проверяю время, если время между 10 и 6тогда пользователь логин еще покажет ошибку под названием Please Login Between Allowed time спасибо за все ваши ответы.

<?php

namespace App\Http\Middleware;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Closure;

class CheckTime
{

    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next)
    {
        $user = $this->auth->user();

    // Check user is an admin or not

        if (! is_admin()) {

            $time = Carbon::now(); // Current time
            $start = Carbon::create($time->year, $time->month, $time->day, 10, 0, 0); //set time to 10:00
            $end = Carbon::create($time->year, $time->month, $time->day, 18, 0, 0); //set time to 18:00

            // Checking the Allowed Time or not

        if (!isAllowedTime()) {
                \Session::flush();
                return redirect('login')->with('error')
            } 
        }
        return $next($request);
    }
}


...