【发布时间】:2020-01-16 16:15:23
【问题描述】:
我有一个 Laravel(5.8) 应用程序,其中有两个角色 Super Admin 和 Admin,它们保存在两个不同的表 admins 和 users 中。他们每个人都有自己的访问级别。但是,整个应用程序中大约 95% 的路由对于每个路由都是相同的,但会根据其访问级别进行限制或修改。
例如:Admin只能更新自己的个人资料,拥有创建和查看权限。Super Admin可以玩admins的列表,拥有创建/更新权限/查看和删除。
因此我有两个警卫users(default) = users table 和admins = admins table。但是,当我在同一个控制器中添加两者或警卫时,它只会继续重定向并显示the page is not redirecting properly
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'member' => [
'driver' => 'session',
'provider' => 'member',
],
...
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'member' => [
'driver' => 'eloquent',
'model' => App\Member::class,
],
],
用户.php
class User extends Authenticatable
{
...
public function _login($request)
{
if(\Auth::attempt([
'email' => $request->email,
'password' => $request->password
]))
{
return [
'success' => true
];
}
else
{
return [
'success' => false
];
}
}
}
会员.php
class Member extends Authenticatable
{
...
public function _login($request)
{
if(\Auth::guard('member')->attempt([
'email' => $request->email,
'password' => $request->password
]))
{
return [
'success' => true
];
}
else
{
return [
'success' => false
];
}
}
}
HomeController.php
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
echo "<pre>";
if(\Auth::user())
{
print_r(\Auth::user());
}
else if(\Auth::guard('member')->user())
{
print_r(\Auth::guard('member')->user());
}
echo "</pre>";
}
}
如果我在__construct() 中评论auth 中间件,那么它可以工作并显示登录用户的数据,但如果继续重定向并显示the page is not redirecting properly 错误。
【问题讨论】:
标签: laravel authentication routes