1

我们在教育环境中使用 Microsoft Graph API 来存储教师创建的学生数据。我们正试图找出一种能够确定的方法:

  • 如果用户是学生或教师。根据文档,这似乎是可能的,但根据 Stack Overflow 上的评论和我们所见,这仅在学校使用 SDS 并且我们使用应用程序而不是委托权限时才有效。

  • 我们想以某种方式确定学生是否是由老师教的。我们看不到任何明确的方法可以做到这一点。我们能弄清楚的唯一方法是扫描学生的所有课程,然后找到用户是所有者/教授这些课程的那些课程。

4

1 回答 1

3

从技术上讲,您不需要使用 School Data Sync (SDS),但它确实使数据更易于使用且更加一致。这是因为 SDS 会在每次同步时自动填充primaryRoleteacher和数据。student如果没有 SDS,这将需要由您的应用程序确定和更新。这通常是一个不平凡的练习。

也就是说,有几种方法可以确定用户是学生还是教师,而无需依赖primaryRole. 更直接的方式是/taughtClasses端点。这将返回用户拥有/教授的类的集合:

GET beta/education/users/{id|userPrincipalName}/taughtClasses

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.educationClass)",
  "value": [
    {
      "id": "c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d",
      "description": "PrimaryTestClass",
      "displayName": "PrimaryTestClass",
      "mailNickname": "PrimaryTestClass",
      "classCode": "21001",
      "externalName": "PrimaryTestClass",
      "externalId": "21001",
      "externalSource": "sis",
      "term": {
        "externalId": "12000",
        "startDate": "2017-07-01",
        "endDate": "2018-06-30",
        "displayName": "SY1516"
      },
      "course": {
        "subject": "PrimaryTestClass",
        "courseNumber": "101",
        "description": "PrimaryTestClass",
        "displayName": "PrimaryTestClass",
        "externalId": "21001"
      }
    },
    {
      "id": "8a15c9c0-13ed-464a-81ec-a6fb2d571599",
      "description": "Health Level 1",
      "displayName": "Health 1",
      "mailNickname": "fineartschool.net",
      "externalSource": "sis",
      "externalName": "Health Level 1",
      "externalId": "11019",
      "classCode": "Health 501",
      "createdBy": {
        "application": {
          "id": "a0c464d5-af1f-4bb9-bbdd-196bd577c796"
        },
        "user": {
          "id": "7cea8be3-ceec-4200-b224-4845c8e38363"
        }
      }
    }
  ]
}

确定哪个老师教哪个学生更棘手。您可以获取他们所属的班级列表,beta/education/users/{id}/classes但您需要遍历beta/education/classes/c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d/teachers?$select=id,userPrincipalName列表以通过查询编译完整的教师列表来获取每个班级的教师列表。

至于应用程序与委托,教育 API 在委托范围方面故意非常严格。这是由于学生信息的高度敏感性质以及该数据收到的可理解的安全审查级别。

于 2019-11-11T18:05:57.657 回答