feat(authz): 重写权限模板分配与班级授权边界
拆分能力、分配范围和业务关系,固定管理员能力并收紧组织级写入口。 补齐内容、课表、设备会话和实时通道授权,兼容旧库分配及历史快照。 重写权限分配预览,按实际可操作范围展示维护入口,合并学生入口并独立学年升级页。 增加授权攻击矩阵及静态门禁,更新隔离回归与开发契约。 验证:授权矩阵 23 段通过,Node 24 下 Web 63/63,类型检查、lint 与文档严格构建通过。
This commit is contained in:
1 parent
682818dd4a
commit
66be3a63b1
115 files changed
+4463
-2747
No files matched your search
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE "UserPermissionGroup" ADD COLUMN "scope" TEXT NOT NULL DEFAULT 'TEACHING';
|
||||
ALTER TABLE "UserPermissionGroup" ADD COLUMN "scopeValue" TEXT NOT NULL DEFAULT '';
|
||||
UPDATE "UserPermissionGroup" SET "scope" = COALESCE((SELECT CASE WHEN g."scope" = 'SELF_CLASS' THEN CASE WHEN g."scopeValue" = 'HEAD' THEN 'HEAD' ELSE 'TEACHING' END ELSE g."scope" END FROM "PermissionGroup" g WHERE g."id" = "groupId"), 'TEACHING'), "scopeValue" = COALESCE((SELECT CASE WHEN g."scope" IN ('GRADE', 'DIVISION') THEN g."scopeValue" ELSE '' END FROM "PermissionGroup" g WHERE g."id" = "groupId"), '');
|
||||
UPDATE "PermissionGroup" SET "scope" = CASE WHEN "scopeValue" = 'HEAD' THEN 'HEAD' ELSE 'TEACHING' END, "scopeValue" = '' WHERE "scope" = 'SELF_CLASS';
|
||||
UPDATE "PermissionGroup" SET "scope" = 'TEACHING', "scopeValue" = '' WHERE "defaultRole" = 'TEACHER';
|
||||
DROP INDEX "UserPermissionGroup_userId_groupId_key";
|
||||
CREATE UNIQUE INDEX "UserPermissionGroup_userId_groupId_scope_scopeValue_key" ON "UserPermissionGroup"("userId", "groupId", "scope", "scopeValue");
|
||||
@@ -451,7 +451,8 @@ model Grade {
|
||||
}
|
||||
|
||||
model PermissionGroup {
|
||||
scope String @default("SELF_CLASS")
|
||||
/// 新分配的建议范围,不参与已有分配求值。
|
||||
scope String @default("TEACHING")
|
||||
scopeValue String @default("")
|
||||
/// 角色默认组;自定义组为空,改名不影响对应角色。
|
||||
defaultRole String? @unique
|
||||
@@ -483,6 +484,9 @@ model PermissionGroupItem {
|
||||
|
||||
/// 账号 ←→ 权限组 的分配关系(一个账号可属多个组)
|
||||
model UserPermissionGroup {
|
||||
/// 此条分配的生效范围。
|
||||
scope String @default("TEACHING")
|
||||
scopeValue String @default("")
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
groupId String
|
||||
@@ -491,7 +495,7 @@ model UserPermissionGroup {
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
group PermissionGroup @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([userId, groupId])
|
||||
@@unique([userId, groupId, scope, scopeValue])
|
||||
@@index([userId])
|
||||
@@index([groupId])
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user