[英]Laravel 5.8, Auth::user() is not using User model
我的用戶 model 中有一個 function,稱為 isAdmin,如果數據庫中的“Admin”設置為 1,則返回 true,否則返回 false。
這將如何與Auth::user()
一起使用?
當我執行Auth::user()->isAdmin()
時,它返回"Property [admin] does not exist on this collection instance."
這就是為什么我得出結論它可能不使用用戶 model?
用戶 model
public function isAdmin() {
if($this->admin == 1) {
return true;
} else {
return false;
}
}
public function view ()
{
if(Auth::check() && Auth::user()->isAdmin()) {
$user = User::all();
$post = Post::all();
$visit = Visits::all();
return view('admin')->with('post', $post)->with('user', $user)->with('visit', $visit);
} else {
return redirect()->to('/');
}
}
如果我可以建議,對於這個用例,你實際上可以不用額外的 function。 你可以說auth()->user()->admin
,特別是如果數據庫中的 'admin' 列是 boolean 類型。
否則(即使 admin 列不是 boolean 類型)您可以在 model 中設置一個 mutator 方法,如下所示:
public function getIsAdminAttribute()
{
return (bool) $this->admin;
}
然后檢查您是否可以像這樣訪問它: Auth::user()->isAdmin
或auth()->user()->isAdmin
更好的是,您可能想了解Gate
和Policies
以實現更強大的訪問控制。 https://laravel.com/docs/5.7/authorization
建議,將代碼更改為:
public function isAdmin() {
return $this->admin;
}
此代碼與您上面的代碼完全相同。
現在在您使用的admin.blade.php
中:
$user->isAdmin();
但是在 controller 你有:
$user = User::all();
返回集合。
您應該對其進行迭代,並檢查每個用戶實例是否是管理員:
$users = User::all();
在視圖中:
@foreach($users as $user)
@if($user->isAdmin())
{{ $user->name }} // some code here..
@endif
@endforeach
無需做任何事情只需檢查登錄然后 auth()->check() 是否返回 true 然后 auth()->user() 返回用戶
public function view ()
{
if(auth()->check() && auth()->user()->isAdmin()) {
$user = User::all();
$post = Post::all();
$visit = Visits::all();
return view('admin')->with('post', $post)->with('user', $user)->with('visit', $visit);
} else {
return redirect()->to('/');
}
}
public function isAdmin()
{
return $this->admin;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.