php Laravel 5.8,Auth::user()没有使用User模型

ttcibm8c  于 5个月前  发布在  PHP
关注(0)|答案(3)|浏览(44)

我有一个函数在我的用户模型,这是所谓的isAdmin,如果“管理”设置为1在数据库中,它返回真,如果不是它返回假。
这将如何与Auth::user()工作?
当我执行Auth::user()->isAdmin()时,它返回"Property [admin] does not exist on this collection instance."
这就是为什么我得出的结论,它可能不使用用户模型?
用户模型

public function isAdmin() {
   if($this->admin == 1) {
        return true;
     } else {
        return false;
   }
}

个字符

2nc8po8w

2nc8po8w1#

如果我可以建议的话,对于这个用例,你实际上可以不使用额外的函数。你可以只说auth()->user()->admin,特别是如果数据库中的“admin”列是布尔类型的话。
否则(即使admin列也不是布尔类型),你可以在模型中设置一个mutator方法,如下所示:

public function getIsAdminAttribute()
{
   return (bool) $this->admin;
}

字符串
然后检查,您可以像这样访问它:Auth::user()->isAdminauth()->user()->isAdmin
更好的是,您可能希望阅读有关GatePolicies的内容,以实现更健壮的访问控制。https://laravel.com/docs/5.7/authorization

7nbnzgx9

7nbnzgx92#

建议,把代码改成这样:

public function isAdmin() {
    return $this->admin;
}

字符串
这段代码做的和你上面得到的完全一样。
admin.blade.php中,您可以使用:

$user->isAdmin();


但在控制器中,您有:

$user  = User::all();


返回集合。
你应该检查它,并检查每个用户示例是否是管理员:

$users  = User::all();


在这方面:

@foreach($users as $user)
 @if($user->isAdmin())
    {{ $user->name }} // some code here..
 @endif
@endforeach

unhi4e5o

unhi4e5o3#

不需要做任何事情,只要检查登录,然后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('/');
        }
    }

个字符

相关问题