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\Entities\Entity;
 | 
			
		||||
use BookStack\Model;
 | 
			
		||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
 | 
			
		||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
 | 
			
		||||
 | 
			
		||||
class JointPermission extends Model
 | 
			
		||||
{
 | 
			
		||||
    protected $primaryKey = null;
 | 
			
		||||
    public $timestamps = false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 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');
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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\Page;
 | 
			
		||||
use BookStack\Auth\Permissions\PermissionsRepo;
 | 
			
		||||
use BookStack\Auth\Role;
 | 
			
		||||
use Laravel\BrowserKitTesting\HttpException;
 | 
			
		||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 | 
			
		||||
use Tests\BrowserKitTest;
 | 
			
		||||
 | 
			
		||||
class RolesTest extends BrowserKitTest
 | 
			
		||||
| 
						 | 
				
			
			@ -852,7 +850,7 @@ class RolesTest extends BrowserKitTest
 | 
			
		|||
 | 
			
		||||
    private function addComment($page) {
 | 
			
		||||
        $comment = factory(\BookStack\Actions\Comment::class)->make();
 | 
			
		||||
        $url = "/ajax/page/$page->id/comment";
 | 
			
		||||
        $url = "/comment/$page->id";
 | 
			
		||||
        $request = [
 | 
			
		||||
            'text' => $comment->text,
 | 
			
		||||
            'html' => $comment->html
 | 
			
		||||
| 
						 | 
				
			
			@ -865,7 +863,7 @@ class RolesTest extends BrowserKitTest
 | 
			
		|||
 | 
			
		||||
    private function updateComment($commentId) {
 | 
			
		||||
        $comment = factory(\BookStack\Actions\Comment::class)->make();
 | 
			
		||||
        $url = "/ajax/comment/$commentId";
 | 
			
		||||
        $url = "/comment/$commentId";
 | 
			
		||||
        $request = [
 | 
			
		||||
            'text' => $comment->text,
 | 
			
		||||
            'html' => $comment->html
 | 
			
		||||
| 
						 | 
				
			
			@ -875,7 +873,7 @@ class RolesTest extends BrowserKitTest
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    private function deleteComment($commentId) {
 | 
			
		||||
         $url = '/ajax/comment/' . $commentId;
 | 
			
		||||
         $url = '/comment/' . $commentId;
 | 
			
		||||
         return $this->json('DELETE', $url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue