多角色账号按 All > College > Class > Self 自动取最高权限。

学院管理员限制在所属学院。
辅导员通过稳定账号 ID 绑定行政班,避免重名串班。
教师只能访问本人档案、授课课程和所授课学生。
学生只能访问本人档案及所在班级课程。
教师/学生角色会自动校验并绑定工号或学号档案。
超级管理员可在用户页面调整角色、学院、工号/学号,并预览生效后的数据范围。
This commit is contained in:
2026-07-24 14:54:30 +08:00 Unverified
parent 0b463fa4f2
commit bcc4d33bd5
26 changed files with 2333 additions and 88 deletions
@@ -0,0 +1,50 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Jiaowu.Api.Infrastructure.Persistence.Migrations.MySql
{
/// <inheritdoc />
public partial class ClassCounselorAssignment : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "CounselorUserId",
table: "AdministrativeClasses",
type: "char(36)",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AdministrativeClasses_CounselorUserId",
table: "AdministrativeClasses",
column: "CounselorUserId");
migrationBuilder.AddForeignKey(
name: "FK_AdministrativeClasses_AspNetUsers_CounselorUserId",
table: "AdministrativeClasses",
column: "CounselorUserId",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.SetNull);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AdministrativeClasses_AspNetUsers_CounselorUserId",
table: "AdministrativeClasses");
migrationBuilder.DropIndex(
name: "IX_AdministrativeClasses_CounselorUserId",
table: "AdministrativeClasses");
migrationBuilder.DropColumn(
name: "CounselorUserId",
table: "AdministrativeClasses");
}
}
}
@@ -89,6 +89,9 @@ namespace Jiaowu.Api.Infrastructure.Persistence.Migrations.MySql
b.Property<string>("CounselorName")
.HasColumnType("longtext");
b.Property<Guid?>("CounselorUserId")
.HasColumnType("char(36)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
@@ -117,6 +120,8 @@ namespace Jiaowu.Api.Infrastructure.Persistence.Migrations.MySql
b.HasIndex("Code")
.IsUnique();
b.HasIndex("CounselorUserId");
b.HasIndex("MajorId");
b.HasIndex("IsEnabled", "SortOrder");
@@ -1154,12 +1159,19 @@ namespace Jiaowu.Api.Infrastructure.Persistence.Migrations.MySql
modelBuilder.Entity("Jiaowu.Api.Domain.Academic.AdministrativeClass", b =>
{
b.HasOne("Jiaowu.Api.Domain.Identity.ApplicationUser", "CounselorUser")
.WithMany()
.HasForeignKey("CounselorUserId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Jiaowu.Api.Domain.Academic.Major", "Major")
.WithMany()
.HasForeignKey("MajorId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("CounselorUser");
b.Navigation("Major");
});