feat(auth): make upload review a separate grant instead of an admin privilege

Reviewing the upload queue is now a per-user flag (reviews_uploads), not part
of the admin role: several people can hold it, a moderator can have it, and an
admin may not. Only admins grant or revoke it; existing admins keep it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nidandClaude Opus 5.5 committed 2026-10-21 10:07:05 +03:00
1 parent 066ba24834
commit 74da457362
27 files changed
+503 -319

No files matched your search

@@ -1648,6 +1648,8 @@ export interface components {
username: string;
display_name: string | null;
role: components["schemas"]["Role"];
/** @description Может рассматривать очередь на добавление. Не следует из роли и может быть у нескольких людей сразу */
reviews_uploads: boolean;
locale: string;
ui_prefs: components["schemas"]["UiPrefs"];
must_change_password: boolean;
@@ -1675,6 +1677,8 @@ export interface components {
username: string;
display_name: string | null;
role: components["schemas"]["Role"];
/** @description Может рассматривать очередь на добавление. Не следует из роли и может быть у нескольких людей сразу */
reviews_uploads: boolean;
locale: string;
is_blocked: boolean;
must_change_password: boolean;
@@ -1692,6 +1696,8 @@ export interface components {
username: string;
display_name?: string;
role: components["schemas"]["Role"];
/** @description Сразу выдать аудит загрузок. Может задать только админ */
reviews_uploads?: boolean;
};
CreatedUser: {
user: components["schemas"]["AdminUser"];
@@ -1703,6 +1709,8 @@ export interface components {
display_name?: string;
role?: components["schemas"]["Role"];
is_blocked?: boolean;
/** @description Выдать или забрать аудит загрузок. Может менять только админ, в том числе у себя */
reviews_uploads?: boolean;
};
TemporaryPassword: {
temporary_password: string;
+1
View File
@@ -11,6 +11,7 @@ const user = {
ui_prefs: {},
must_change_password: false,
must_change_credentials: false,
reviews_uploads: false,
created_at: '2026-01-01T00:00:00Z',
};
+6 -1
View File
@@ -1,7 +1,7 @@
{
"users": {
"title": "Users",
"subtitle": "Create users and moderators, manage roles, reset passwords, block accounts",
"subtitle": "Create users and moderators, manage roles, upload review, reset passwords, block accounts",
"create": "Create user",
"search": "Name or username",
"all": "All",
@@ -20,6 +20,9 @@
"block": "Block",
"unblock": "Unblock",
"make_role": "Make {{role}}",
"review_uploads": "Upload review",
"grant_review": "Grant upload review",
"revoke_review": "Revoke upload review",
"delete": "Delete",
"delete_confirm": "Delete {{username}}? Their history and likes will be lost.",
"block_confirm": "Block {{username}}? All their sessions will end.",
@@ -36,6 +39,8 @@
"username_hint": "Latin letters, digits, \".\", \"_\", \"-\"",
"display_name": "Name",
"role": "Role",
"review_uploads": "Upload review",
"review_uploads_hint": "They can review the upload queue. This is not a role: several people can have it, and an admin might not.",
"password_note": "The server will generate a password and show it once.",
"submit": "Create"
},
+6 -1
View File
@@ -1,7 +1,7 @@
{
"users": {
"title": "Пользователи",
"subtitle": "Создание пользователей и модераторов, роли, сброс пароля, блокировка",
"subtitle": "Создание пользователей и модераторов, роли, аудит загрузок, сброс пароля, блокировка",
"create": "Создать пользователя",
"search": "Имя или логин",
"all": "Все",
@@ -20,6 +20,9 @@
"block": "Заблокировать",
"unblock": "Разблокировать",
"make_role": "Сделать: {{role}}",
"review_uploads": "Аудит загрузок",
"grant_review": "Дать аудит загрузок",
"revoke_review": "Забрать аудит загрузок",
"delete": "Удалить",
"delete_confirm": "Удалить {{username}}? Его история и лайки пропадут.",
"block_confirm": "Заблокировать {{username}}? Все его сессии завершатся.",
@@ -36,6 +39,8 @@
"username_hint": "Латинские буквы, цифры, «.», «_», «-»",
"display_name": "Имя",
"role": "Роль",
"review_uploads": "Аудит загрузок",
"review_uploads_hint": "Сможет рассматривать очередь. Это не роль: можно выдать нескольким людям, у админа её может не быть.",
"password_note": "Пароль сгенерирует сервер и покажет один раз.",
"submit": "Создать"
},