VISH 应用——俄罗斯交通大学课表

面向所有学院学生和教职工的俄罗斯交通大学课表。按天和按周查看自己班级和任意教师的课表、此刻的空闲教室、教室、班级和教师的使用情况、课表变更通知以及课表人工智能助手。

学院

俄罗斯交通大学应用涵盖五个学院:高等工程学院、民航学院、道路管理学院、先进工程学院“高铁学院”和国际交通运输学院。在任何学院,班级课表和教师课表的查找方式都相同。

VISH 应用的功能
栏目
指南

访问权限(RBAC)

更新于 28.10.2026

使用VISH基于角色(RBAC):每个帐户有一个角色,一个角色有一组权限,API方法需要某些权限。 API密钥和OAuth令牌只会缩小权限,而不会扩展权限。 于2026年10月23日与摊位d1核对。

角色

角色决定了一个人在应用程序中可以做什么。 内置角色:

密码角色短
user用户没有额外的权利;这就是每个人开始的方式
teacher教师课程笔记;帐户与教师卡相连
moderator主持人管理研究所的时间表
manager经理课程经理
programHead项目经理教育项目经理
analyst分析员查看和上传摘要分析,不改变任何东西(到目前为止只有d1)
sales, adsManager销售、广告经理地点、合作伙伴和广告活动(到目前为止只有d1)
inspector检查员看到一切,不改变任何东西(查看模式)
developer, admin开发人员、管理员所有权利
team, product, colleagueVISH团队,产品,同事作为开发人员的所有权利:来自合作伙伴的所有员工,产品经理和同事。 新的目录权限自行获取;管理员撤回的权限不返回(至今只有d1)
changelog-publisher出版业“最新消息”CI发布的机器人的角色“最新消息”;它不能做其他任何事情

管理员可以创建自己的角色。 帐户的角色和权限显示在响应中GET /auth/me (字段role和permissions).

权利

右边是该类型的一行область:объект:действие. 集成最常需要的几个:

对什么许可?
schedule:note:create, schedule:note:update, schedule:note:delete课程笔记
schedule:lesson:create, schedule:lesson:update, schedule:lesson:delete时间表编辑
schedule:lesson:notify通知每个有课程表的人
analytics:read分析法,分析法: /usage/export/…, /reports/institute,工作量。 发现被写入审计日志
analytics:export将分析作为文件上传,例如,JSON中的时间表POST /exports(到目前为止只有d1)
students:read团体学生名单
api:keys:self-issue在没有应用程序的情况下向自己发出API密钥

完整的列表与描述给出GET /rbac/permissions -它要求有权rbac:roles:read. 特定方法需要哪些权限在其OpenAPI中的描述中进行了描述(/documentation).

除了权利,一个帐户可以是 仅限于团体和机构:然后,即使有权编辑,一个人只能编辑他们的组的时间表。

如何验证请求

  1. 你是谁 关键是X-Api-Key,否则令牌为Authorization: Bearer. 既没有一个也没有另一个—开放方法像其他人一样响应,其余的都是401 AUTH_REQUIRED.
  2. 角色权利。 每个请求都会重新读取它们:如果角色已更改,则立即有效,而不是在令牌过期时有效。
  3. 变窄。 权限键是发布时注意到的内容与角色赋予的内容的交集 现在. OAuth令牌根本没有角色权限:只从调用它的方法的简短列表中读取scope.
  4. 观看模式。 查看模式下的帐户(“检查员”角色)只能读取:任何更改请求是403 VIEW_ONLY,还有钥匙。
  5. 检查方法。 没有必要的权利-403 FORBIDDEN,缺失的权利列于error.message.

403是什么意思?

error.code原因怎么办
FORBIDDEN角色或键不具有所需的权限;它在消息中被命名请求具有此权限的角色或向其发出密钥
VIEW_ONLY查看模式下的帐户更改-从另一个帐户
SESSION_REQUIRED应用程序中的仅人工方法不要使用OAuth密钥或令牌
PERSON_REQUIRED该方法仅适用于人类,不适用于机器人—
OAUTH_SCOPE_INSUFFICIENTOAuth令牌不允许使用此方法只有来自范围一览表

依靠error.code:消息的文本正在翻译中,可能会发生变化。

如何获得更多权利

  • 角色。 在应用程序, “我的角色” (/role,或“设置” → “查阅资料”):教师或雇员角色的申请。 它由研究所的一名雇员审查;决定是通过通知来的。
  • 钥匙。 关键不能超过你的角色。 如果角色获得了新的权限,但密钥没有,则重新发布不会添加它们(权限和术语保持不变):您需要一个新密钥,无论是通过应用程序还是通过自己发布,请参阅API和访问密钥.
  • 该“登录应用程序是通过VISH”. 只要求scope这是需要的;允许的列表在注册期间设置。

哪些方法是开放的?

一个开放的方法是一个没有要求的方法security在OpenAPI中。 该示例根据立场本身的文档对此类方法进行计数。:

// Count public and protected operations in the stand's own OpenAPI document.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'
const DOC = new URL('/documentation/json', API)

const response = await fetch(DOC)
if (!response.ok) throw new Error(`${DOC}: HTTP ${response.status}`)
const openapi = await response.json()

const operations = Object.entries(openapi.paths).flatMap(([path, methods]) =>
	Object.entries(methods).map(([method, operation]) => ({
		line: `${method.toUpperCase()} ${path}`,
		isPublic: !operation.security?.length,
	})),
)
const isPublic = (line) => operations.find((operation) => operation.line === line)?.isPublic

if (isPublic('GET /api/v1/groups') !== true || isPublic('GET /api/v1/auth/me') !== false) {
	throw new Error('unexpected security in the OpenAPI document')
}
const open = operations.filter((operation) => operation.isPublic && operation.line.startsWith('GET '))
console.log(`${operations.length} operations, ${open.length} public GETs, for example:`)
for (const operation of open.slice(0, 8)) console.log(' ', operation.line)

您可以像这样查看您的角色和权限(使用“API密钥”场):

试一试请求

只有带锁的方法需要密钥。密钥只保存在本页:不会被存储,只作为本次请求的请求头发送,离开页面后即被清除。 如何获取密钥

验证:2026-10,PWA aa337c45,平台bff65fce._