Я работаю над приложением Laravel, в этом приложении каждый пользователь может иметь несколько ролей, в этом приложении есть 12 ролей, из которых один пользователь может иметь по крайней мере одну из них одновременно или много из них, что я хочукогда пользователь хочет войти в систему, я хочу показать ему / ей доступные роли, с которыми он / она может войти, и он / она должен выбрать одну из своих ролей для входа в систему, у меня есть одно промежуточное ПО для каждой роли, которая может быть установлена для него / неепроблема в том, что я не могу установить конкретное промежуточное ПО для пользователя при входе в систему.
одно из промежуточных программ:
<?php
namespace App\Http\Middleware;
use Closure;
class CTDMiddleware {
public function handle($request, Closure $next) {
if (Auth::check()) {
$role = Auth::user()->user_role[0]->role->role;
if (strtolower($role) == \App\Classes\User_Groups::$ctd) {
return $next($request);
}
}
return redirect()->route('/logout');
}
}
Здесь я только что проверил первую роль пользователя, в то время как у нее может быть гораздо больше ролей.,Контроллер входа в систему:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller {
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function login(Request $request) {
$validator = Validator::make(
array(
'email' => $request->email,
'password' => $request->password
), array(
'email' => 'required | email',
'password' => 'required',
)
);
if ($validator->fails()) {
return redirect('admin/login')->withErrors($validator)->withInput();
} else {
$adminInfo = array("email" => $request->email, "password" => $request->password);
if (auth()->attempt($adminInfo)) {
return redirect('/home');
} else {
return redirect('/login')->with('errors', new \PhpParser\Error('Not Found', array('email', 'password')));
}
}
}
public function logout() {
auth()->logout();
return view('auth/login');
}
}
однако я еще не реализовал опцию выбора роли, но в контроллере входа в систему я хочу вызвать попытку () для определенного промежуточного программного обеспечения.