php - 如何根据角色限制 Laravel 登录?
问题描述
我正在寻找一种更好、更有效的方法来限制用户基于他们给定的角色登录到应用程序。例如只有Users
具有角色Administrator
才能能够登录到应用程序仪表板。
这是我的实现
谢谢
用户表播种器
<?php
use App\User;
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$user = new User();
$user->name = "admin";
$user->email = "";
$user->mobile = "";
$user->is_admin = true;
$user->password = bcrypt("");
$user->active = false;
$user->save();
}
}
登录方式
public function login(Request $request)
{
// Check validation
$validator = $this->validate($request, [
'email' => 'required | email',
'password' => 'required | string | min:8',
]);
if ($this->authenticate($request)) {
return redirect()->route('home');
}
return redirect('/')->withErrors($validator, 'login');
}
验证方法
public function authenticate($request)
{
return \Auth::guard()->attempt([
'email' => $request->email,
'password' => $request->password,
],
$request->filled('remember')
);
}
解决方案
在您的登录控制器中覆盖此方法以限制登录
protected function credentials(Request $request)
{
return array_merge($request->only($this->username(), 'password'), ['is_admin' => 1]);
}
/**
* Get the failed login response instance.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendFailedLoginResponse(Request $request)
{
$errors = [$this->username() => trans('auth.failed')];
// Load user from database
$user = User::where($this->username(), $request->{$this->username()})->first();
// Check if user was successfully loaded, that the password matches
// and is_admin not 1. If so, override the default error message.
if ($user && \Hash::check($request->password, $user->password) && $user->is_admin != 1) {
$errors = [$this->username() => "You don't have access to login this system"];
}
if ($request->expectsJson()) {
return response()->json($errors, 422);
}
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
}
确保在顶部使用它。
use Illuminate\Http\Request;
use App\User;
推荐阅读
- .net - vb.net 有没有办法知道实例化这个属性的属性构造函数中的类名?
- file - 如何删除正在创建且无法删除的 Error.error 文件?
- html - img 的大小在不同的浏览器中是否有不同的行为?
- javascript - 自定义流类型定义显然没有被读取
- xcode - 从构建阶段设置 Info.plist 值
- c# - 在控制台应用程序中使用数字和字母创建一个 16x26 的网格
- python-3.x - PermissionError:[Errno 13] Windows 上的权限被拒绝(pyinstaller)
- sqlite - 如何在 UWP 的新 SQLiteConnection 中传递 db 路径名?
- html - 设置内联元素的高度和宽度
- python - Pyqt5:RangeSlider 对象