Я использую зависимость 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)
это потому, что нет записи о разрешении для привязки идентификатора. вроде очевидно.