-- CreateTable CREATE TABLE "permissions" ( "code" VARCHAR(64) NOT NULL, "module" VARCHAR(32) NOT NULL, "module_label" VARCHAR(32) NOT NULL, "name" VARCHAR(64) NOT NULL, "description" VARCHAR(255) NOT NULL DEFAULT '', "is_special" BOOLEAN NOT NULL DEFAULT false, "sort_order" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMPTZ(3) NOT NULL, CONSTRAINT "permissions_pkey" PRIMARY KEY ("code") ); -- CreateTable CREATE TABLE "data_scopes" ( "id" CHAR(26) NOT NULL, "role_id" CHAR(26) NOT NULL, "scope_type" VARCHAR(32) NOT NULL, "target_id" CHAR(26), "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "data_scopes_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "permissions_module_sort_order_idx" ON "permissions"("module", "sort_order"); -- CreateIndex CREATE INDEX "data_scopes_role_id_idx" ON "data_scopes"("role_id"); -- CreateIndex CREATE INDEX "data_scopes_scope_type_target_id_idx" ON "data_scopes"("scope_type", "target_id"); -- CreateIndex CREATE UNIQUE INDEX "data_scopes_role_id_scope_type_target_id_key" ON "data_scopes"("role_id", "scope_type", "target_id"); -- AddForeignKey ALTER TABLE "data_scopes" ADD CONSTRAINT "data_scopes_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE;