mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-05-01 23:19:51 +00:00
Implemented alternate approach to current joint_permissions
Is a tweak upon the existing approach, mainly to store and query role permission access in a way that allows muli-level states that may override eachother. These states are represented in the new PermissionStatus class. This also simplifies how own permissions are stored and queried, to be part of a single column.
This commit is contained in:
parent
7d74575eb8
commit
2d1f1abce4
10 changed files with 137 additions and 39 deletions
database/migrations
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
use BookStack\Auth\Permissions\JointPermissionBuilder;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class RefactorJointPermissionsStorage extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// Truncate before schema changes to avoid performance issues
|
||||
// since we'll need to rebuild anyway.
|
||||
DB::table('joint_permissions')->truncate();
|
||||
|
||||
if (Schema::hasColumn('joint_permissions', 'owned_by')) {
|
||||
Schema::table('joint_permissions', function (Blueprint $table) {
|
||||
$table->dropColumn(['has_permission', 'has_permission_own', 'owned_by']);
|
||||
|
||||
$table->unsignedTinyInteger('status')->index();
|
||||
$table->unsignedInteger('owner_id')->nullable()->index();
|
||||
});
|
||||
}
|
||||
|
||||
// Rebuild permissions
|
||||
app(JointPermissionBuilder::class)->rebuildForAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
DB::table('joint_permissions')->truncate();
|
||||
|
||||
Schema::table('joint_permissions', function (Blueprint $table) {
|
||||
$table->dropColumn(['status', 'owner_id']);
|
||||
|
||||
$table->boolean('has_permission')->index();
|
||||
$table->boolean('has_permission_own')->index();
|
||||
$table->unsignedInteger('created_by')->index();
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue