laravel - 如何使用 Laravel 在登录中添加 Spatie 角色条件
问题描述
我正在使用 Laravel-8、laravel-passport 和 spatie-permission 来获取 restful api。我已经在控制器中有此代码。
我有这个管理员的控制器:
public function adminLogin(Request $request)
{
if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['name'] = $user->name;
return $this->sendResponse($success, 'User login successfully.');
}
else{
return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
}
}
我只希望“超级管理员”能够使用管理控制器登录。如果不是“超级管理员”,则应指示未经授权。
如何将下面的代码包含在上面已有的代码中或任何其他最佳方式中?
if($user->hasRole('Super Admin'))
$res = User::with(['roles', 'employee', 'company'])->find($user->id);
else
$res = User::with('roles')->find($user->id);
解决方案
您可以在尝试身份验证后检查用户的角色。
public function adminLogin(Request $request)
{
if (Auth::attempt($request->only('email', 'password'))) {
$user = Auth::user();
if (!$user->hasRole('Super Admin') {
Auth::logout();
return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
}
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['name'] = $user->name;
return $this->sendResponse($success, 'User login successfully.');
}
return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
}
推荐阅读
- ionic-framework - 无法播放某些 Vimeo 视频。是否可以在 ionic 上设置 Referer 请求标头
- javascript - 当我在 React 中的类 Component 的开头声明一个变量时出错
- javascript - 使用酶进行浅渲染:实际输出与预期输出不匹配
- solr - Hybris 自定义方面排序提供程序不起作用
- angular - ReferenceError:在初始化之前无法访问服务'
- django - 动态和自定义 URL
- c# - 如何在 Swashbuckle 中显示我的模型中使用的自定义注释?
- jupyter-notebook - 在本地运行 jupter notebook 与 google colab 中加载文件的问题,因为数据文件的顺序似乎不同
- sql - 验证代码中的 Pl/SQL 语法问题
- elasticsearch - ElasticSearch NEST 简单条款查询需要 .keyword