【发布时间】:2023-04-01 07:52:01
【问题描述】:
User 模型有一个 isAdmin() 函数来检查用户是否是管理员。下一步该做什么?
【问题讨论】:
-
表单登录是一样的。
标签: laravel authentication redirect conditional-statements admin
User 模型有一个 isAdmin() 函数来检查用户是否是管理员。下一步该做什么?
【问题讨论】:
标签: laravel authentication redirect conditional-statements admin
最好的方法是使用位于App\Http\Controllers\Auth\LoginController 下的默认laravel LoginController。
在该控制器中,您可以覆盖从AuthenticatesUsers trait 注入的authenticated 方法,只需在LoginController 中添加该方法即可:
* @param Request $request
* @param $user
*/
protected function authenticated(Request $request, $user)
{
if ($user->isAdmin()) {
return redirect(route('admin-dashboard'));
//redirect to desired place since user is admin.
}
}
【讨论】:
最佳实践是 whit 角色,您在 Routes::middleware 上添加角色,
Route::group(['middleware' => ['auth', 'roles:admin']], function () {
//Your routes
});
内核.php
'roles' => Middleware\CheckRole::class,
创建中间件
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
public function handle($request, Closure $next, ...$role)
{
if ($request->user()->hasAnyRole($role)) {
return $next($request);
}
return redirect(route('hour'));
}
}
在用户模型上创建函数
public function authorizeRole($role)
{
if ($this->hasAnyRole($role)) {
return true;
}
return abort(401, 'Unauthorized.');
}
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
public function hasRole($role)
{
if ($this->role()->where('name', $role)->first()) {
return true;
}
return false;
}
public function role()
{
return $this->belongsTo('App\Role')->withDefault();
}
和榜样
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function user()
{
return $this->hasMany('App\User');
}
}
更多的代码,但是最好的方式
【讨论】: