From ac640cc81360d64571716f9ee242a402c06784e9 Mon Sep 17 00:00:00 2001 From: Nick Zeng Date: Mon, 9 Mar 2026 14:13:31 +0800 Subject: [PATCH] add routes and route_group table --- backend/app/Model/Route.php | 53 +++++++++++++++++++ ...03_09_200000_create_route_groups_table.php | 31 +++++++++++ .../2026_03_09_210000_create_routes_table.php | 34 ++++++++++++ ..._220000_create_role_route_groups_table.php | 31 +++++++++++ 4 files changed, 149 insertions(+) create mode 100644 backend/app/Model/Route.php create mode 100644 backend/migrations/2026_03_09_200000_create_route_groups_table.php create mode 100644 backend/migrations/2026_03_09_210000_create_routes_table.php create mode 100644 backend/migrations/2026_03_09_220000_create_role_route_groups_table.php diff --git a/backend/app/Model/Route.php b/backend/app/Model/Route.php new file mode 100644 index 0000000..26cb2b4 --- /dev/null +++ b/backend/app/Model/Route.php @@ -0,0 +1,53 @@ + 'integer', + 'group_id' => 'integer', + ]; + + /** + * 所属分组 + */ + public function group(): BelongsTo + { + return $this->belongsTo(RouteGroup::class, 'group_id'); + } + + /** + * 路由的角色覆盖规则 + */ + public function overrides(): HasMany + { + return $this->hasMany(RoleRouteOverride::class, 'route_id'); + } +} diff --git a/backend/migrations/2026_03_09_200000_create_route_groups_table.php b/backend/migrations/2026_03_09_200000_create_route_groups_table.php new file mode 100644 index 0000000..c7f54ac --- /dev/null +++ b/backend/migrations/2026_03_09_200000_create_route_groups_table.php @@ -0,0 +1,31 @@ +id()->comment('主键'); + $table->string('name', 50)->unique()->comment('分组标识'); + $table->string('label', 100)->comment('显示名称'); + $table->text('description')->nullable()->comment('描述'); + $table->integer('sort_order')->default(0)->comment('排序'); + $table->timestampTz('created_at')->useCurrent()->comment('创建时间'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('route_groups'); + } +}; diff --git a/backend/migrations/2026_03_09_210000_create_routes_table.php b/backend/migrations/2026_03_09_210000_create_routes_table.php new file mode 100644 index 0000000..4f5883e --- /dev/null +++ b/backend/migrations/2026_03_09_210000_create_routes_table.php @@ -0,0 +1,34 @@ +id()->comment('主键'); + $table->unsignedBigInteger('group_id')->nullable()->comment('所属分组'); + $table->string('method', 10)->comment('HTTP 方法'); + $table->string('path', 255)->comment('路由路径'); + $table->string('name', 100)->nullable()->comment('路由名称'); + $table->string('label', 200)->nullable()->comment('显示名称'); + + $table->unique(['method', 'path']); + $table->foreign('group_id')->references('id')->on('route_groups')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('routes'); + } +}; diff --git a/backend/migrations/2026_03_09_220000_create_role_route_groups_table.php b/backend/migrations/2026_03_09_220000_create_role_route_groups_table.php new file mode 100644 index 0000000..dfdbc3b --- /dev/null +++ b/backend/migrations/2026_03_09_220000_create_role_route_groups_table.php @@ -0,0 +1,31 @@ +unsignedBigInteger('role_id')->comment('角色 ID'); + $table->unsignedBigInteger('group_id')->comment('路由分组 ID'); + + $table->primary(['role_id', 'group_id']); + $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); + $table->foreign('group_id')->references('id')->on('route_groups')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('role_route_groups'); + } +};