Laravel 5.8, Auth:: user() не использует модель пользователя

Laravel 5.8, Auth:: user() не использует модель пользователя

16.11.2019 01:03:23 Просмотров 87 Источник

У меня есть функция в моей пользовательской модели, которая называется 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('/');
        }
    }
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045172_58889575
используйте Auth:: user () - >isAdmin();
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045196_58889575
Извините, я ошибся в своем вопросе. Я уже использую Auth:: user () - >isAdmin())
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045291_58889575
Я добавил свой код
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045339_58889575
Если я делаю dd, он возвращает true, как и должно быть. Но откуда тогда могла взяться ошибка?
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045375_58889575
Я добавил код, где я пытаюсь проверить, является ли пользователь Auth администратором
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104045964_58889575
Является ли столбец admin в базе данных типом boolean? Если это так, и для этого случая использования, вы можете обойтись без дополнительной функции. Вы могли бы просто сказать Auth:: user () - >admin, и он должен работать.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104046157_58889575
@AmitSenjaliya извините, что я по ошибке пометил вас, отредактировал мой комментарий выше :)
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104046178_58889575
@nakov нет проблем, но вы можете объяснить об ошибках, если вы знаете
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model#comment104046198_58889575
Я знаю, мой ответ ниже объясняет это, но @CunnertA не хочет смотреть на него :)

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

nakov

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
albus_severus

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;

    }

https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58889779#comment104045582_58889779
tbh мне нравится способ использования функции, его гораздо чище для меня.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58889779#comment104045720_58889779
я меняю свой ответ.пожалуйста, проверьте это
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58889779#comment104045738_58889779
Здесь нет необходимости return, поскольку оператор view(), и выполнение не будет выполняться в return, если оператор ifif имеет значение false, выполнение перейдет к elseв любом случае.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58889779#comment104045769_58889779
я просто восстанавливаю его fuction & auth () - >user()
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58889779#comment104045857_58889779
@albus_severus блок elseне имеет никакого смысла здесь. Поскольку the return statementнемедленно завершает выполнение функции, когда она вызывается из этой функции
Является ответом!
user3532758

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

https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104046250_58890142
Вызов is_adminили adminне имеет значения, ОП упомянул, что хочет использовать метод :) + вместо того, чтобы бросать его так, как OP может просто добавить protected $casts = ['admin' => 'boolean'];в модели он достигнет того же.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104046519_58890142
@Наков хороший улов. casts array-это еще один метод литья и удовлетворяет моей главной проблеме (первый пункт) наличия дополнительного метода.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104046573_58890142
Во всяком 1 = trueи 0 = falseв PHP, поэтому нет необходимости в кастинге, если пользователю не нужно где-то показывать trueили false:) ошибка действительно очевидна, но пользователь ушел :)
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104046633_58890142
Спасибо! Я сделал это bool и изменил свой метод. Так намного чище :)
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104047161_58890142
@CunnertA я действительно хочу, чтобы вы научили меня, как это решило вашу проблему, которую вы поделились выше :D
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104047862_58890142
Проблема была не в функции, а в моем представлении лезвия. У меня там была опечатка. Поэтому ваш ответ не решил мою проблему, но он перенаправил меня в хорошее и чистое решение.
https://stackoverflow.com/questions/58889575/laravel-5-8-authuser-is-not-using-user-model/58890142#comment104047989_58890142
@CunnertA как я сказал в своем ответе ниже, что ваша проблема находится в виде лезвия. Но это была не опечатка, но вы использовали $user->isAdmin()и $user-это коллекция. Я рад, что вы решили этот вопрос, я просто хотел быть ясным, что я не упускаю что-то :)
Закрыть X