--- /dev/null
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
+
+return new class extends Migration
+{
+ /**
+ * Run the migrations.
+ *
+ * @return void
+ */
+ public function up()
+ {
+ $guestUserId = DB::table('users')
+ ->where('system_name', '=', 'public')
+ ->first(['id'])->id;
+ $publicRoleId = DB::table('roles')
+ ->where('system_name', '=', 'public')
+ ->first(['id'])->id;
+
+ // This migration deletes secondary "Guest" user role assignments
+ // as a safety precaution upon upgrade since the logic is changing
+ // within the release this is introduced in, which could result in wider
+ // permissions being provided upon upgrade without this intervention.
+
+ // Previously, added roles would only partially apply their permissions
+ // since some permission checks would only consider the originally assigned
+ // public role, and not added roles. Within this release, additional roles
+ // will fully apply.
+ DB::table('role_user')
+ ->where('user_id', '=', $guestUserId)
+ ->where('role_id', '!=', $publicRoleId)
+ ->delete();
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ // No structural changes to make, and we cannot know the role ids to re-assign.
+ }
+};
$resp->assertRedirect($book->getUrl());
$this->followRedirects($resp)->assertSee($book->name);
}
+
+ public function test_public_view_can_take_on_other_roles()
+ {
+ $this->setSettings(['app-public' => 'true']);
+ $newRole = $this->users->attachNewRole(User::getDefault(), []);
+ $page = $this->entities->page();
+ $this->permissions->disableEntityInheritedPermissions($page);
+ $this->permissions->addEntityPermission($page, ['view', 'update'], $newRole);
+
+ $resp = $this->get($page->getUrl());
+ $resp->assertOk();
+
+ $this->withHtml($resp)->assertLinkExists($page->getUrl('/edit'));
+ }
}