mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-19 10:09:05 +08:00
Removed joint_permissions auto_increment id
Removed auto_incrementing id and set a primary key of the [role_id, entity_type, entity_id, action] instead since this table could recieve a lot of activity, especially when permission regeneration was automated, leading to very high auto_increment counts which could max out the integer limit. Also updated some RolesTest comment endpoints to align with recent route changes. Should fix #2091
This commit is contained in:
parent
7590ecd37c
commit
a9f02550f0
@ -3,25 +3,26 @@
|
|||||||
use BookStack\Auth\Role;
|
use BookStack\Auth\Role;
|
||||||
use BookStack\Entities\Entity;
|
use BookStack\Entities\Entity;
|
||||||
use BookStack\Model;
|
use BookStack\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||||
|
|
||||||
class JointPermission extends Model
|
class JointPermission extends Model
|
||||||
{
|
{
|
||||||
|
protected $primaryKey = null;
|
||||||
public $timestamps = false;
|
public $timestamps = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the role that this points to.
|
* Get the role that this points to.
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
|
||||||
*/
|
*/
|
||||||
public function role()
|
public function role(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Role::class);
|
return $this->belongsTo(Role::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the entity this points to.
|
* Get the entity this points to.
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\MorphOne
|
|
||||||
*/
|
*/
|
||||||
public function entity()
|
public function entity(): MorphOne
|
||||||
{
|
{
|
||||||
return $this->morphOne(Entity::class, 'entity');
|
return $this->morphOne(Entity::class, 'entity');
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class DropJointPermissionsId extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('joint_permissions', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('id');
|
||||||
|
$table->primary(['role_id', 'entity_type', 'entity_id', 'action'], 'joint_primary');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('joint_permissions', function (Blueprint $table) {
|
||||||
|
$table->dropPrimary(['role_id', 'entity_type', 'entity_id', 'action']);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table('joint_permissions', function (Blueprint $table) {
|
||||||
|
$table->increments('id')->unsigned();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
use BookStack\Entities\Bookshelf;
|
use BookStack\Entities\Bookshelf;
|
||||||
use BookStack\Entities\Page;
|
use BookStack\Entities\Page;
|
||||||
use BookStack\Auth\Permissions\PermissionsRepo;
|
|
||||||
use BookStack\Auth\Role;
|
use BookStack\Auth\Role;
|
||||||
use Laravel\BrowserKitTesting\HttpException;
|
use Laravel\BrowserKitTesting\HttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
||||||
use Tests\BrowserKitTest;
|
use Tests\BrowserKitTest;
|
||||||
|
|
||||||
class RolesTest extends BrowserKitTest
|
class RolesTest extends BrowserKitTest
|
||||||
@ -852,7 +850,7 @@ class RolesTest extends BrowserKitTest
|
|||||||
|
|
||||||
private function addComment($page) {
|
private function addComment($page) {
|
||||||
$comment = factory(\BookStack\Actions\Comment::class)->make();
|
$comment = factory(\BookStack\Actions\Comment::class)->make();
|
||||||
$url = "/ajax/page/$page->id/comment";
|
$url = "/comment/$page->id";
|
||||||
$request = [
|
$request = [
|
||||||
'text' => $comment->text,
|
'text' => $comment->text,
|
||||||
'html' => $comment->html
|
'html' => $comment->html
|
||||||
@ -865,7 +863,7 @@ class RolesTest extends BrowserKitTest
|
|||||||
|
|
||||||
private function updateComment($commentId) {
|
private function updateComment($commentId) {
|
||||||
$comment = factory(\BookStack\Actions\Comment::class)->make();
|
$comment = factory(\BookStack\Actions\Comment::class)->make();
|
||||||
$url = "/ajax/comment/$commentId";
|
$url = "/comment/$commentId";
|
||||||
$request = [
|
$request = [
|
||||||
'text' => $comment->text,
|
'text' => $comment->text,
|
||||||
'html' => $comment->html
|
'html' => $comment->html
|
||||||
@ -875,7 +873,7 @@ class RolesTest extends BrowserKitTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function deleteComment($commentId) {
|
private function deleteComment($commentId) {
|
||||||
$url = '/ajax/comment/' . $commentId;
|
$url = '/comment/' . $commentId;
|
||||||
return $this->json('DELETE', $url);
|
return $this->json('DELETE', $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user