1
0
mirror of https://github.com/flarum/core.git synced 2025-08-16 21:34:08 +02:00

Fix group/permission seeding

Updating the Migration::addPermission helper table name means we need
to move the seed migration to after the table rename migration. We also
add a sanity check for each permission's group since the foreign key
will fail if the group doesn't exist. Of course, the only way to make
sure groups are seeded before permissions is to move them into another
migration.
This commit is contained in:
Toby Zerner
2018-07-21 23:02:44 +09:30
parent 1709d4ef2c
commit 254d5d0c5b
5 changed files with 53 additions and 52 deletions

View File

@@ -137,11 +137,11 @@ abstract class Migration
*/
public static function addPermissions(array $permissions)
{
$keys = [];
$rows = [];
foreach ($permissions as $permission => $groups) {
foreach ((array) $groups as $group) {
$keys[] = [
$rows[] = [
'group_id' => $group,
'permission' => $permission,
];
@@ -149,23 +149,27 @@ abstract class Migration
}
return [
'up' => function (Builder $schema) use ($keys) {
'up' => function (Builder $schema) use ($rows) {
$db = $schema->getConnection();
foreach ($keys as $key) {
$instance = $db->table('permissions')->where($key)->first();
if (is_null($instance)) {
$db->table('permissions')->insert($key);
foreach ($rows as $row) {
if ($db->table('group_permission')->where($row)->exists()) {
continue;
}
if ($db->table('groups')->where('id', $row['group_id'])->doesntExist()) {
continue;
}
$db->table('group_permission')->insert($row);
}
},
'down' => function (Builder $schema) use ($keys) {
'down' => function (Builder $schema) use ($rows) {
$db = $schema->getConnection();
foreach ($keys as $key) {
$db->table('permissions')->where($key)->delete();
foreach ($rows as $row) {
$db->table('group_permission')->where($row)->delete();
}
}
];

View File

@@ -193,8 +193,6 @@ class InstallCommand extends AbstractCommand
$this->application->register(SearchServiceProvider::class);
$this->application->register(PostServiceProvider::class);
$this->seedGroups();
$this->createAdminUser();
$this->enableBundledExtensions();
@@ -280,28 +278,6 @@ class InstallCommand extends AbstractCommand
}
}
protected function seedGroups()
{
Group::unguard();
$groups = [
[Group::ADMINISTRATOR_ID, 'Admin', 'Admins', '#B72A2A', 'fas fa-wrench'],
[Group::GUEST_ID, 'Guest', 'Guests', null, null],
[Group::MEMBER_ID, 'Member', 'Members', null, null],
[Group::MODERATOR_ID, 'Mod', 'Mods', '#80349E', 'fas fa-bolt']
];
foreach ($groups as $group) {
Group::create([
'id' => $group[0],
'name_singular' => $group[1],
'name_plural' => $group[2],
'color' => $group[3],
'icon' => $group[4],
]);
}
}
protected function createAdminUser()
{
$admin = $this->adminUser;