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:
1 parent
066ba24834
commit
74da457362
27 files changed
+503
-319
No files matched your search
@@ -14,7 +14,7 @@ const (
|
||||
PermManageLibrary // хранилища, сканирование, переиндексация
|
||||
PermViewLibraryStatus // статус библиотеки (просмотр)
|
||||
PermSuggestTracks // предлагать треки, видеть свои предложения
|
||||
PermReviewUploads // очередь, одобрение, правка метаданных, лимиты
|
||||
PermReviewUploads // очередь, одобрение, правка метаданных; даёт флаг, не роль
|
||||
PermSystemStatus // статус рекомендательной системы, аудит
|
||||
)
|
||||
|
||||
@@ -24,11 +24,11 @@ var permissions = map[Permission][]Role{
|
||||
PermManageLibrary: {RoleAdmin},
|
||||
PermViewLibraryStatus: {RoleModerator, RoleAdmin},
|
||||
PermSuggestTracks: {RoleModerator, RoleAdmin},
|
||||
PermReviewUploads: {RoleAdmin},
|
||||
PermSystemStatus: {RoleAdmin},
|
||||
}
|
||||
|
||||
// Can сообщает, есть ли у роли глобальное право.
|
||||
// Аудит загрузок сюда не входит: его проверяет Principal.Allowed.
|
||||
func Can(r Role, p Permission) bool {
|
||||
for _, allowed := range permissions[p] {
|
||||
if allowed == r {
|
||||
@@ -38,6 +38,14 @@ func Can(r Role, p Permission) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Allowed — право конкретного пользователя. Аудит загрузок не вытекает из роли admin.
|
||||
func (p Principal) Allowed(perm Permission) bool {
|
||||
if perm == PermReviewUploads {
|
||||
return p.ReviewsUploads
|
||||
}
|
||||
return Can(p.Role, perm)
|
||||
}
|
||||
|
||||
// UserAction — действие над учётной записью другого пользователя.
|
||||
type UserAction int
|
||||
|
||||
|
||||
Reference in new issue
Block a user