已完成“专业课教学任务下放学院管理”。

专业必修、专业选修、实践课程:由课程所属学院创建、修改、删除、发布和关闭。
公共必修、公共选修:仍由校级教务管理。
校级教务可以查看全校专业课任务,但不能代替学院维护。
超级管理员保留跨学院纠错权限。
教师分配统一要求:教师已申报该课程,并通过学院审核。
兼岗账号同时拥有校级公共课和本学院专业课职责。
This commit is contained in:
2026-07-24 19:43:24 +08:00 Unverified
parent e6d8eb0662
commit 5da1a8a403
5 changed files with 212 additions and 20 deletions
+98
View File
@@ -99,4 +99,102 @@ public sealed class DataScopeTests
Guid.NewGuid(),
CourseNature.GeneralRequired));
}
[Theory]
[InlineData(CourseNature.MajorRequired, true)]
[InlineData(CourseNature.MajorElective, true)]
[InlineData(CourseNature.Practice, true)]
[InlineData(CourseNature.GeneralRequired, false)]
[InlineData(CourseNature.GeneralElective, false)]
public void CollegeAdmin_Manages_Own_Professional_TeachingTasks(
CourseNature nature,
bool expected)
{
var collegeId = Guid.NewGuid();
var scope = new CurrentUserScope(
Guid.NewGuid(),
"学院教务",
collegeId,
DataScope.College,
new HashSet<string>([SystemRoles.CollegeAdmin]));
Assert.Equal(
expected,
TeachingTaskMaintenancePolicy.CanManage(scope, collegeId, nature));
Assert.False(TeachingTaskMaintenancePolicy.CanManage(
scope,
Guid.NewGuid(),
nature));
}
[Theory]
[InlineData(CourseNature.GeneralRequired, true)]
[InlineData(CourseNature.GeneralElective, true)]
[InlineData(CourseNature.MajorRequired, false)]
[InlineData(CourseNature.MajorElective, false)]
[InlineData(CourseNature.Practice, false)]
public void AcademicAdmin_Manages_Public_Not_Professional_TeachingTasks(
CourseNature nature,
bool expected)
{
var scope = new CurrentUserScope(
Guid.NewGuid(),
"校级教务",
null,
DataScope.All,
new HashSet<string>([SystemRoles.AcademicAdmin]));
Assert.Equal(
expected,
TeachingTaskMaintenancePolicy.CanManage(
scope,
Guid.NewGuid(),
nature));
}
[Theory]
[InlineData(CourseNature.GeneralRequired)]
[InlineData(CourseNature.MajorRequired)]
[InlineData(CourseNature.Practice)]
public void SuperAdmin_Can_Override_TeachingTask_Responsibility(
CourseNature nature)
{
var scope = new CurrentUserScope(
Guid.NewGuid(),
"超级管理员",
null,
DataScope.All,
new HashSet<string>([SystemRoles.SuperAdmin]));
Assert.True(TeachingTaskMaintenancePolicy.CanManage(
scope,
Guid.NewGuid(),
nature));
}
[Fact]
public void Combined_School_And_College_Roles_Keep_Both_Responsibilities()
{
var collegeId = Guid.NewGuid();
var scope = new CurrentUserScope(
Guid.NewGuid(),
"校院兼岗教务",
collegeId,
DataScope.All,
new HashSet<string>(
[SystemRoles.AcademicAdmin, SystemRoles.CollegeAdmin]));
Assert.True(TeachingTaskMaintenancePolicy.CanManage(
scope,
Guid.NewGuid(),
CourseNature.GeneralRequired));
Assert.True(TeachingTaskMaintenancePolicy.CanManage(
scope,
collegeId,
CourseNature.MajorRequired));
Assert.False(TeachingTaskMaintenancePolicy.CanManage(
scope,
Guid.NewGuid(),
CourseNature.MajorRequired));
}
}