访问权限(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, colleague | VISH团队,产品,同事 | 作为开发人员的所有权利:来自合作伙伴的所有员工,产品经理和同事。 新的目录权限自行获取;管理员撤回的权限不返回(至今只有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).
除了权利,一个帐户可以是 仅限于团体和机构:然后,即使有权编辑,一个人只能编辑他们的组的时间表。
如何验证请求
- 你是谁 关键是
X-Api-Key,否则令牌为Authorization: Bearer. 既没有一个也没有另一个—开放方法像其他人一样响应,其余的都是401AUTH_REQUIRED. - 角色权利。 每个请求都会重新读取它们:如果角色已更改,则立即有效,而不是在令牌过期时有效。
- 变窄。 权限键是发布时注意到的内容与角色赋予的内容的交集 现在. OAuth令牌根本没有角色权限:只从调用它的方法的简短列表中读取
scope. - 观看模式。 查看模式下的帐户(“检查员”角色)只能读取:任何更改请求是403
VIEW_ONLY,还有钥匙。 - 检查方法。 没有必要的权利-403
FORBIDDEN,缺失的权利列于error.message.
403是什么意思?
error.code | 原因 | 怎么办 |
|---|---|---|
FORBIDDEN | 角色或键不具有所需的权限;它在消息中被命名 | 请求具有此权限的角色或向其发出密钥 |
VIEW_ONLY | 查看模式下的帐户 | 更改-从另一个帐户 |
SESSION_REQUIRED | 应用程序中的仅人工方法 | 不要使用OAuth密钥或令牌 |
PERSON_REQUIRED | 该方法仅适用于人类,不适用于机器人 | — |
OAUTH_SCOPE_INSUFFICIENT | OAuth令牌不允许使用此方法 | 只有来自范围一览表 |
依靠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._