Laravel 5.8, Auth:: user() не использует модель пользователя
У меня есть функция в моей пользовательской модели, которая называется isAdmin, если "Admin" установлен в 1 в базе данных, он возвращает true, если нет, он возвращает false.
Как это будет работать с 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;
}
}
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('/');
}
}















Ответы - Laravel 5.8, Auth:: user() не использует модель пользователя / Laravel 5.8, Auth::user() is not using User model

16.11.2019 01:24:05
Предложение, измените код только на это:
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

16.11.2019 01:32:48
Не нужно ничего делать, просто проверить, если логин после авторизации()->проверить() возврат true, то двиг()->пользователь() вернет пользователя
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;
}



return
, поскольку оператор view()
, и выполнение не будет выполняться в return
, если оператор if
if имеет значение false, выполнение перейдет к else
в любом случае.


else
не имеет никакого смысла здесь. Поскольку the return statement
немедленно завершает выполнение функции, когда она вызывается из этой функции

16.11.2019 02:19:13
Если я могу предложить, для этого случая использования, вы действительно можете обойтись без дополнительной функции. Вы можете просто сказать auth()->user()->admin
, особенно если столбец "admin" в базе данных имеет логический тип.
В противном случае (даже admin coloumn не является логическим типом) вы можете настроить метод мутатора в модели, например:
public function getIsAdminAttribute()
{
return (bool) $this->admin;
}
Затем, чтобы проверить, вы можете получить доступ к нему следующим образом: Auth::user()->isAdmin
или auth()->user()->isAdmin
А еще лучше, вы можете прочитать о Gate
и Policies
для достижения более надежного контроля доступа. https://laravel.com/docs/5.7/authorization

is_admin
или admin
не имеет значения, ОП упомянул, что хочет использовать метод :) + вместо того, чтобы бросать его так, как OP может просто добавить protected $casts = ['admin' => 'boolean'];
в модели он достигнет того же.


1 = true
и 0 = false
в PHP, поэтому нет необходимости в кастинге, если пользователю не нужно где-то показывать true
или false
:) ошибка действительно очевидна, но пользователь ушел :)




$user->isAdmin()
и $user
-это коллекция. Я рад, что вы решили этот вопрос, я просто хотел быть ясным, что я не упускаю что-то :)