{ "version": 1, "scope": "ut_tran granular action permissions; no compatibility OR for deprecated broad codes", "defaultMigration": "For non-root roles expand only legacy permissions already held AND corresponding page held. Existing admin dynamic-all becomes explicit actual effective abilities: business page/manage abilities retained except content writes and learner-only actions. root stays dynamic all. teacher/student defaults listed are migration guidance, not additional grants to custom roles.", "selection": "FORMAL_EXAM uses teaching.exams actions; TRAINING uses assignment.channelCode. Always authorize persisted project/assignment type; editing assignment kind needs old and new kind update permissions.", "unchanged": [ "teaching.virtual.execute", "teaching.physical.execute", "teaching.confrontation.execute", "teaching.immersive.execute", "teaching.physical.ingest", "teaching.confrontation.configure", "integration.knowledge.reindex", "integration.data-processing.ingest", "integration.ai-models.test", "integration.assistance.monitor", "integration.assistance.intervene" ], "deprecated": [ "content.create", "content.update", "content.publish", "teaching.tasks.create", "teaching.tasks.publish", "teaching.tasks.withdraw", "teaching.tasks.review", "teaching.tasks.archive", "teaching.tasks.accept", "teaching.tasks.submit", "integration.resources.manage", "integration.knowledge.manage", "integration.data-processing.manage", "integration.ai-models.manage" ], "permissions": [ { "code": "content.model.create", "pageCodes": [ "content.model" ], "requires": [ "content.model" ], "legacyCodes": [ "content.create" ], "operation": "create,copy,create-from-template", "defaultRoles": [ "teacher" ] }, { "code": "content.model.update", "pageCodes": [ "content.model" ], "requires": [ "content.model" ], "legacyCodes": [ "content.update" ], "operation": "edit,upload,cover,restore-version,revise,submit-review,withdraw-review", "defaultRoles": [ "teacher" ] }, { "code": "content.model.delete", "pageCodes": [ "content.model" ], "requires": [ "content.model" ], "legacyCodes": [ "content.update" ], "operation": "delete-project", "defaultRoles": [ "teacher" ] }, { "code": "content.model.publish", "pageCodes": [ "content.model" ], "requires": [ "content.model" ], "legacyCodes": [ "content.publish" ], "operation": "publish,revoke-publication,register-guide-template", "defaultRoles": [ "teacher" ] }, { "code": "content.scene.create", "pageCodes": [ "content.scene" ], "requires": [ "content.scene" ], "legacyCodes": [ "content.create" ], "operation": "create,copy,create-from-template", "defaultRoles": [ "teacher" ] }, { "code": "content.scene.update", "pageCodes": [ "content.scene" ], "requires": [ "content.scene" ], "legacyCodes": [ "content.update" ], "operation": "edit,upload,cover,restore-version,revise,submit-review,withdraw-review", "defaultRoles": [ "teacher" ] }, { "code": "content.scene.delete", "pageCodes": [ "content.scene" ], "requires": [ "content.scene" ], "legacyCodes": [ "content.update" ], "operation": "delete-project", "defaultRoles": [ "teacher" ] }, { "code": "content.scene.publish", "pageCodes": [ "content.scene" ], "requires": [ "content.scene" ], "legacyCodes": [ "content.publish" ], "operation": "publish,revoke-publication,register-guide-template", "defaultRoles": [ "teacher" ] }, { "code": "content.training.create", "pageCodes": [ "content.training" ], "requires": [ "content.training" ], "legacyCodes": [ "content.create" ], "operation": "create,copy,create-from-template", "defaultRoles": [ "teacher" ] }, { "code": "content.training.update", "pageCodes": [ "content.training" ], "requires": [ "content.training" ], "legacyCodes": [ "content.update" ], "operation": "edit,upload,cover,restore-version,revise,submit-review,withdraw-review", "defaultRoles": [ "teacher" ] }, { "code": "content.training.delete", "pageCodes": [ "content.training" ], "requires": [ "content.training" ], "legacyCodes": [ "content.update" ], "operation": "delete-project", "defaultRoles": [ "teacher" ] }, { "code": "content.training.publish", "pageCodes": [ "content.training" ], "requires": [ "content.training" ], "legacyCodes": [ "content.publish" ], "operation": "publish,revoke-publication,register-guide-template", "defaultRoles": [ "teacher" ] }, { "code": "content.ofd.create", "pageCodes": [ "content.ofd" ], "requires": [ "content.ofd" ], "legacyCodes": [ "content.create" ], "operation": "create,copy,create-from-template", "defaultRoles": [ "teacher" ] }, { "code": "content.ofd.update", "pageCodes": [ "content.ofd" ], "requires": [ "content.ofd" ], "legacyCodes": [ "content.update" ], "operation": "edit,upload,cover,restore-version,revise,submit-review,withdraw-review", "defaultRoles": [ "teacher" ] }, { "code": "content.ofd.delete", "pageCodes": [ "content.ofd" ], "requires": [ "content.ofd" ], "legacyCodes": [ "content.update" ], "operation": "delete-project", "defaultRoles": [ "teacher" ] }, { "code": "content.ofd.publish", "pageCodes": [ "content.ofd" ], "requires": [ "content.ofd" ], "legacyCodes": [ "content.publish" ], "operation": "publish,revoke-publication,register-guide-template", "defaultRoles": [ "teacher" ] }, { "code": "content.ofd.review", "pageCodes": [ "content.ofd" ], "requires": [ "content.ofd" ], "legacyCodes": [ "content.update" ], "operation": "approve,reject", "defaultRoles": [ "teacher" ] }, { "code": "teaching.virtual.create", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "create-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.update", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "edit-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.publish", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.publish" ], "operation": "publish-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.withdraw", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.withdraw" ], "operation": "withdraw-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.archive", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.archive" ], "operation": "archive-assignment,archive-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.review", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "review-run,timeout-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.terminate", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "terminate-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.virtual.accept", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.accept" ], "operation": "accept-assignment", "defaultRoles": [ "student" ] }, { "code": "teaching.virtual.submit", "pageCodes": [ "teaching.virtual" ], "requires": [ "teaching.virtual" ], "legacyCodes": [ "teaching.tasks.submit" ], "operation": "submit-run", "defaultRoles": [ "student" ] }, { "code": "teaching.physical.create", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "create-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.update", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "edit-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.publish", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.publish" ], "operation": "publish-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.withdraw", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.withdraw" ], "operation": "withdraw-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.archive", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.archive" ], "operation": "archive-assignment,archive-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.review", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "review-run,timeout-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.terminate", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "terminate-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.physical.accept", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.accept" ], "operation": "accept-assignment", "defaultRoles": [ "student" ] }, { "code": "teaching.physical.submit", "pageCodes": [ "teaching.physical" ], "requires": [ "teaching.physical" ], "legacyCodes": [ "teaching.tasks.submit" ], "operation": "submit-run", "defaultRoles": [ "student" ] }, { "code": "teaching.confrontation.create", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "create-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.update", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "edit-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.publish", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.publish" ], "operation": "publish-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.withdraw", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.withdraw" ], "operation": "withdraw-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.archive", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.archive" ], "operation": "archive-assignment,archive-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.review", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "review-run,timeout-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.terminate", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "terminate-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.accept", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.accept" ], "operation": "accept-assignment", "defaultRoles": [ "student" ] }, { "code": "teaching.confrontation.submit", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.tasks.submit" ], "operation": "submit-run", "defaultRoles": [ "student" ] }, { "code": "teaching.exams.create", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "create-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.update", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.create" ], "operation": "edit-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.publish", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.publish" ], "operation": "publish-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.withdraw", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.withdraw" ], "operation": "withdraw-assignment", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.archive", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.archive" ], "operation": "archive-assignment,archive-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.review", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "review-run,timeout-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.terminate", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.review" ], "operation": "terminate-run", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.exams.accept", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.accept" ], "operation": "accept-assignment", "defaultRoles": [ "student" ] }, { "code": "teaching.exams.submit", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.tasks.submit" ], "operation": "submit-run", "defaultRoles": [ "student" ] }, { "code": "teaching.exams.execute", "pageCodes": [ "teaching.exams" ], "requires": [ "teaching.exams" ], "legacyCodes": [ "teaching.virtual.execute" ], "operation": "start,progress,execution for formal exams", "defaultRoles": [ "student" ] }, { "code": "teaching.confrontation.fault.create", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.confrontation.configure" ], "operation": "create-fault", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.fault.update", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.confrontation.configure" ], "operation": "edit-fault", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.fault.delete", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.confrontation.configure" ], "operation": "delete-fault", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.confrontation.intervene", "pageCodes": [ "teaching.confrontation" ], "requires": [ "teaching.confrontation" ], "legacyCodes": [ "teaching.confrontation.configure" ], "operation": "create,activate,revoke-intervention", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.guides.study", "pageCodes": [ "teaching.guides" ], "requires": [ "teaching.guides" ], "legacyCodes": [ "teaching.guides" ], "operation": "start/complete own reading", "defaultRoles": [ "student" ] }, { "code": "teaching.guides.feedback", "pageCodes": [ "teaching.guides" ], "requires": [ "teaching.guides" ], "legacyCodes": [ "teaching.guides" ], "operation": "submit own feedback", "defaultRoles": [ "student" ] }, { "code": "teaching.guides.feedback.review", "pageCodes": [ "teaching.guides" ], "requires": [ "teaching.guides" ], "legacyCodes": [ "teaching.analytics" ], "operation": "manage feedback", "defaultRoles": [ "admin", "teacher" ] }, { "code": "teaching.guides.statistics", "pageCodes": [ "teaching.guides" ], "requires": [ "teaching.guides" ], "legacyCodes": [ "teaching.analytics" ], "operation": "guide statistics/all feedback", "defaultRoles": [ "admin", "teacher" ] }, { "code": "integration.resources.create", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "create", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.update", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "edit,restore", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.delete", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "recycle,batch-recycle,purge", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.publish", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "publish,shelve", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.category.create", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "category.create", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.category.update", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "category.update", "defaultRoles": [ "admin" ] }, { "code": "integration.resources.category.delete", "pageCodes": [ "integration.resources" ], "requires": [ "integration.resources" ], "legacyCodes": [ "integration.resources.manage" ], "operation": "category.delete", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.create", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "import-document", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.update", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "edit,replace-source", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.delete", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "delete", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.publish", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "change-status", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.category.create", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "category.create", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.category.update", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "category.update", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.category.delete", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "category.delete", "defaultRoles": [ "admin" ] }, { "code": "integration.knowledge.category.merge", "pageCodes": [ "integration.knowledge" ], "requires": [ "integration.knowledge" ], "legacyCodes": [ "integration.knowledge.manage" ], "operation": "category.merge", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.create", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "create source/model/rule", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.update", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "edit source/model/rule", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.delete", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "delete source/model/rule", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.test", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "test-source", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.pipeline.control", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "start/stop pipeline", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.validate", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "validate-latest", "defaultRoles": [ "admin" ] }, { "code": "integration.data-processing.resolve", "pageCodes": [ "integration.data-processing" ], "requires": [ "integration.data-processing" ], "legacyCodes": [ "integration.data-processing.manage" ], "operation": "resolve-quality-issue", "defaultRoles": [ "admin" ] }, { "code": "integration.ai-models.create", "pageCodes": [ "integration.ai-models" ], "requires": [ "integration.ai-models" ], "legacyCodes": [ "integration.ai-models.manage" ], "operation": "create model/skill/agent", "defaultRoles": [ "admin" ] }, { "code": "integration.ai-models.update", "pageCodes": [ "integration.ai-models" ], "requires": [ "integration.ai-models" ], "legacyCodes": [ "integration.ai-models.manage" ], "operation": "edit model/skill/agent", "defaultRoles": [ "admin" ] }, { "code": "integration.ai-models.delete", "pageCodes": [ "integration.ai-models" ], "requires": [ "integration.ai-models" ], "legacyCodes": [ "integration.ai-models.manage" ], "operation": "delete model/skill/agent", "defaultRoles": [ "admin" ] } ], "auditColumns": [ { "tables": [ "ut_content_audit_log", "ut_integration_audit_log" ], "column": "visibility_scope", "sqlType": "VARCHAR(16) NOT NULL DEFAULT 'BUSINESS'", "values": [ "BUSINESS", "INTERNAL" ], "internalCondition": "trusted /auth/me maintenanceAccount == true (independent of active role)", "normalReadFilter": "visibility_scope='BUSINESS'" } ], "notes": [ "teaching.confrontation.configure remains assignment fault binding and restricted fault-catalog visibility; writes split to fault CRUD/intervene.", "No teaching task DELETE endpoint exists: do not seed nonfunctional delete action.", "Reading study/own feedback retain learner participation policy; task/run member/team/exam safety remains server enforced.", "No new action for analytics read-only endpoints. Existing integration ingest/test/reindex/monitor/intervene remain specific operations." ] }