Laravel: Как проверить, является ли пользователь администратором?

Я хочу, чтобы пользователь был администратором, который при входе в условия сайта проверен == login пользователя, если да, то дайте право удалить или отредактировать продукт. Это мой код:

@if(Auth::check()) <p><a href="#" class="btn btn-success" role="button">Edite</a> <a href="#" class="btn btn-danger" role="button">Remove</a></p> @endif 

Как equate Auth::check() с моим логином?

Прежде всего вам нужно создать таблицу ролей, которая содержит детали ролей. (Я предполагаю, что каждый пользователь может иметь несколько ролей не только администратора)

Таблица ролей:

  Schema::create('role', function (Blueprint $table) { $table->increments('id'); $table->string('name'); }); 

затем

Таблица role_user

 Schema::create('user_role', function (Blueprint $table) { $table->bigInteger('user_id')->unsigned(); $table->integer('role_id')->unsigned(); $table->foreign('user_id') ->references('id')->on('user'); $table->foreign('role_id') ->references('id')->on('role'); }); 

Создать модель ролей:

После этого добавьте отношение ролей к пользовательской модели

 class User extends Authenticatable { public function roles() { return $this->belongsToMany(Role::class, 'user_role'); } } 

Чтобы проверить, имеет ли пользователь роль администратора, вы можете сделать что-то вроде

 @if($user->roles()->where('name', 'Administrator')->exists()) enter code here @endif 

Или вместо этого выражения вы можете поместить функцию в модель пользователя, как показано ниже:

 public function isAdministrator() { return $this->roles()->where('name', 'Administrator')->exists(); } 

Затем в вашей модели вы можете назвать это:

 @if(Auth::user()->isAdministrator()) enter code here @endif 

Другая возможность (1 – 1) Связь

Сначала добавьте столбец is_admin в вашу миграцию

 public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->boolean('is_admin')->default(0); $table->rememberToken(); $table->timestamps(); }); по public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->boolean('is_admin')->default(0); $table->rememberToken(); $table->timestamps(); }); 

Затем вы можете проверить

 @if($user->is_admin) @endif 

здесь уходи

  @if(Auth::check() && Auth::user()->role == "admin") @endif 

вы должны использовать атрибут роли в своей базе данных, и он должен содержать админ или что-то еще (вы также можете использовать атрибут bolean)

Стандартный способ – сделать то, что упоминалось в xdevnull. Но для небольших проектов вы можете сделать что-то вроде этого:

 If(Auth::check() && Auth::user()->isAdmin()) { dd("you are admin") ; } 

И в вашей модели пользователя создайте метод isAdmin ()

 function isAdmin() { $admin_emails = config('settings.admin_emails'); if(in_array($this->email, $admin_emails) return true; else return false; } 

Конечно, вам нужно создать файл конфигурации с настройками в папке app / config.

И поместите это в settings.php

 <?php return ['admin_emails' => explode(', ', env('ADMIN_EMAILS'));] 

И, наконец, в вашем .env-файле добавьте это: ADMIN_EMAILS = user1 @ example.com, user2 @ example.com

Добавьте столько писем, сколько хотите, запятыми .

Теперь, если у зарегистрированного пользователя есть адрес электронной почты как user1@example.com или user2@example.com, тогда она является администратором.

Также обратите внимание, что я добавил электронные письма администратора в файл env, чтобы администраторы могли быть изменены в зависимости от среды. В разработке обычно разработчиком является admin, а в производстве кто-то другой (клиент?) Является администратором.

PS не забудьте запустить php artisan config:cache после создания файла settings.php