select('entity_permissions.id as id') ->join($table, function (JoinClause $join) use ($table, $morphClass) { return $join->where($table . '.restricted', '=', 0) ->on($table . '.id', '=', 'entity_permissions.entity_id'); })->where('entity_type', '=', $morphClass) ->pluck('id'); DB::table('entity_permissions')->whereIn('id', $permissionIds)->delete(); }; $deleteInactiveEntityPermissions('pages', 'page'); $deleteInactiveEntityPermissions('chapters', 'chapter'); $deleteInactiveEntityPermissions('books', 'book'); $deleteInactiveEntityPermissions('bookshelves', 'bookshelf'); // Migrate restricted=1 entries to new entity_permissions (role_id=0) entries $defaultEntityPermissionGenQuery = function (Builder $query, string $table, string $morphClass) { return $query->select(['id as entity_id']) ->selectRaw('? as entity_type', [$morphClass]) ->selectRaw('? as `role_id`', [0]) ->selectRaw('? as `view`', [0]) ->selectRaw('? as `create`', [0]) ->selectRaw('? as `update`', [0]) ->selectRaw('? as `delete`', [0]) ->from($table) ->where('restricted', '=', 1); }; $query = $defaultEntityPermissionGenQuery(DB::query(), 'pages', 'page') ->union(fn(Builder $query) => $defaultEntityPermissionGenQuery($query, 'books', 'book')) ->union(fn(Builder $query) => $defaultEntityPermissionGenQuery($query, 'chapters', 'chapter')) ->union(fn(Builder $query) => $defaultEntityPermissionGenQuery($query, 'bookshelves', 'bookshelf')); DB::table('entity_permissions')->insertUsing(['entity_id', 'entity_type', 'role_id', 'view', 'create', 'update', 'delete'], $query); // Drop restricted columns $dropRestrictedColumn = fn(Blueprint $table) => $table->dropColumn('restricted'); Schema::table('pages', $dropRestrictedColumn); Schema::table('chapters', $dropRestrictedColumn); Schema::table('books', $dropRestrictedColumn); Schema::table('bookshelves', $dropRestrictedColumn); } /** * Reverse the migrations. * * @return void */ public function down() { // Create restricted columns $createRestrictedColumn = fn(Blueprint $table) => $table->boolean('restricted')->index()->default(0); Schema::table('pages', $createRestrictedColumn); Schema::table('chapters', $createRestrictedColumn); Schema::table('books', $createRestrictedColumn); Schema::table('bookshelves', $createRestrictedColumn); // Set restrictions for entities that have a default entity permission assigned // Note: Possible loss of data where default entity permissions have been configured $restrictEntities = function (string $table, string $morphClass) { $toRestrictIds = DB::table('entity_permissions') ->where('role_id', '=', 0) ->where('entity_type', '=', $morphClass) ->pluck('entity_id'); DB::table($table)->whereIn('id', $toRestrictIds)->update(['restricted' => true]); }; $restrictEntities('pages', 'page'); $restrictEntities('chapters', 'chapter'); $restrictEntities('books', 'book'); $restrictEntities('bookshelves', 'bookshelf'); // Delete default entity permissions DB::table('entity_permissions')->where('role_id', '=', 0)->delete(); } };