接下來就來實際應用 Middleware 儲存的 auth_user 變數,在 Controller 作進一步的驗證
index
index method 僅僅限於 admin 的請求才能被執行,因此驗證的部份就是確認 auth_user 是否為 admin
public function index()
{
// 取得 Middleware 存入的變數
$auth_user = request()->get('auth_user')->first();
// 確認 auth_user 是否為 admin
if($auth_user['is_admin']){
return response(['data' => User::get()]);
}
return response(['message' => 'Unauthorized user']);
}
show
show method 除了 admin 之外,還有自己請求自己資料的動作也可以被執行
public function show($id)
{
// 取得 Middleware 存入的變數
$auth_user = request()->get('auth_user')->first();
$user = User::find($id);
// 確認是否為 admin
if($auth_user['is_admin']){
// 確認該使用者是否存在
if(!is_null($user)){
return response(['data' => $user]);
}else{
return response(['message' => 'User not found!!']);
}
// 確認該使用者是否為本人
}elseif($auth_user['id'] == $id){
return response(['data' => $user]);
}else{
return response(['message' => 'Unauthorized!']);
}
}
update
驗證該名使用者是否為自己
public function update(Request $request, $id)
{
$rules = [
'name' => 'string|min:2|max:255',
'email' => 'email|max:256|unique:users,email,'.$id,
'password' => 'string|min:6|max:12|confirmed',
];
$validator = Validator::make($request->all(), $rules);
if($validator->failed()){
return response(['message' => $validator->errors()]);
}
// 取得 Middleware 存入的變數
$auth_user = request()->get('auth_user')->first();
$user = User::find($id);
// 確認該使用者是否為本人
if($auth_user['id'] == $id){
// 確認該使用者是否存在或為 admin
$user->update($request-only(['name', 'email', 'password']));
return response(['data' => $user]);
}elseif(is_null($user)){
return response(['message' => 'User not found']);
}else{
return response(['message' => 'Unauthorized!']);
}
}
delete
同於 show 的情形
public function destroy($id)
{
// 取得 Middleware 存入的變數
$auth_user = request()->get('auth_user')->first();
$user = User::find($id);
// 確認是否為 admin
if($auth_user['is_admin']){
// 確認該使用者是否存在或為 admin
if(!is_null($user) && !$user['is_admin']){
$user->delete();
return response(['message' => 'User deleted!!']);
}else{
return response(['message' => 'User not found or that is a superuser']);
}
}elseif($auth_user['id'] == $id){
$user->delete();
return response(['message' => 'User deleted!!']);
}else{
return response(['message' => 'Request error!!']);
}
此處有三個使用者 ( ken、kai 和 king ),而除了 ken 為 admin,其他為一般使用者
ken 的 api_token
kai 的 api_token
king 的 api_token
index
show ( 查看 kai 的資料 )
update ( 更改 king 的名字為 kingkong )
user 的部份到此結束,接下來就來建立 post 的 API,敬請期待!