Zizaco / entrust Разрешение на сохранение использует таблицу ролей

Я использую зависимость Zizaco / entrust для создания ролей и их разрешений в моем веб-приложении, которое встроено в laravel 5.3. Проблема, с которой я сталкиваюсь, заключается (как сказано в названии) всякий раз, когда я пытаюсь сохранить только что созданное разрешение. Он хранится в таблице roles.

Файл миграции не был изменен по сравнению с исходным пакетом zizaco / entrust. Я использовал php artisan vendor:publish для создания миграции. Модели Role и Permission очень похожи на документацию:

namespace App\Models;

use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{

protected $table = 'roles';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
  protected $fillable = [
      'name', 'display_name', 'description',
  ];
}

И разрешение

namespace App\Models;

use Zizaco\Entrust\EntrustRole;

class Permission extends EntrustRole
{

protected $table = 'permissions';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
      'name', 'display_name', 'description',
  ];
}

а в файле сидера я использую следующий код для создания роли и сидера:

use App\Models\Permission;
use App\Models\Role;
use Illuminate\Database\Seeder;

class RoleSeeder extends Seeder
{
/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $owner = new Role();
    $owner->name         = 'owner';
    $owner->display_name = 'Eigenaar';
    $owner->save();

    $createOwner = new Permission();
    $createOwner->name         = 'create-owner';
    $createOwner->display_name = 'Eigenaar toevoegen';
    $createOwner->save();
 }

Конфигурационный файл доверия также изменяется на правильный путь модели ролей и разрешений, а также таблиц.

Я пробовал использовать composer dump-autoload и даже php artisan cache: clear.

Я что-то пропустил? пожалуйста помоги. Прошу прощения за мой английский, если он грамматически неправильный.

РЕДАКТИРОВАТЬ: когда я пытаюсь привязать свое разрешение к роли следующей строкой:

$owner->attachPermission($createOwner);

Я получаю ошибку sql:

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено s (_7 _._ 8_, CONSTRAINT permission_role_permission_id_foreign FOREIGN KEY (permission_id) ССЫЛКИ permissions (id) ON DELETE CASCADE ON UPDATE CASCADE)

это потому, что нет записи о разрешении для привязки идентификатора. вроде очевидно.


person Hoffie    schedule 27.09.2016    source источник


Ответы (1)


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

Глядя на предоставленный вами код, вы расширили не тот класс для своей модели разрешений. Измените оператор использования и класс расширения в модели Permission на EntrustPermission:

use Zizaco\Entrust\EntrustPermission;

class Permission extends EntrustPermission
person baikho    schedule 27.09.2016
comment
Спасибо, что взглянули на мой код. Не могу поверить, что не видел этого раньше! Я получаю еще одну ошибку. всякий раз, когда я пытаюсь инициализировать его в классе сидера, я получаю сообщение об ошибке: Required parameter $auth missing вы знаете, как я могу это исправить? - person Hoffie; 29.09.2016