Я хочу, чтобы пользователь был администратором, который при входе в условия сайта проверен == 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