mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
fix(server): scoped permissions for more endpoints (#25452)
This commit is contained in:
Generated
+3
@@ -72,6 +72,7 @@ class Permission {
|
|||||||
static const facePeriodRead = Permission._(r'face.read');
|
static const facePeriodRead = Permission._(r'face.read');
|
||||||
static const facePeriodUpdate = Permission._(r'face.update');
|
static const facePeriodUpdate = Permission._(r'face.update');
|
||||||
static const facePeriodDelete = Permission._(r'face.delete');
|
static const facePeriodDelete = Permission._(r'face.delete');
|
||||||
|
static const folderPeriodRead = Permission._(r'folder.read');
|
||||||
static const jobPeriodCreate = Permission._(r'job.create');
|
static const jobPeriodCreate = Permission._(r'job.create');
|
||||||
static const jobPeriodRead = Permission._(r'job.read');
|
static const jobPeriodRead = Permission._(r'job.read');
|
||||||
static const libraryPeriodCreate = Permission._(r'library.create');
|
static const libraryPeriodCreate = Permission._(r'library.create');
|
||||||
@@ -230,6 +231,7 @@ class Permission {
|
|||||||
facePeriodRead,
|
facePeriodRead,
|
||||||
facePeriodUpdate,
|
facePeriodUpdate,
|
||||||
facePeriodDelete,
|
facePeriodDelete,
|
||||||
|
folderPeriodRead,
|
||||||
jobPeriodCreate,
|
jobPeriodCreate,
|
||||||
jobPeriodRead,
|
jobPeriodRead,
|
||||||
libraryPeriodCreate,
|
libraryPeriodCreate,
|
||||||
@@ -423,6 +425,7 @@ class PermissionTypeTransformer {
|
|||||||
case r'face.read': return Permission.facePeriodRead;
|
case r'face.read': return Permission.facePeriodRead;
|
||||||
case r'face.update': return Permission.facePeriodUpdate;
|
case r'face.update': return Permission.facePeriodUpdate;
|
||||||
case r'face.delete': return Permission.facePeriodDelete;
|
case r'face.delete': return Permission.facePeriodDelete;
|
||||||
|
case r'folder.read': return Permission.folderPeriodRead;
|
||||||
case r'job.create': return Permission.jobPeriodCreate;
|
case r'job.create': return Permission.jobPeriodCreate;
|
||||||
case r'job.read': return Permission.jobPeriodRead;
|
case r'job.read': return Permission.jobPeriodRead;
|
||||||
case r'library.create': return Permission.libraryPeriodCreate;
|
case r'library.create': return Permission.libraryPeriodCreate;
|
||||||
|
|||||||
@@ -3173,6 +3173,7 @@
|
|||||||
"state": "Stable"
|
"state": "Stable"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"x-immich-permission": "asset.upload",
|
||||||
"x-immich-state": "Stable"
|
"x-immich-state": "Stable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3225,6 +3226,7 @@
|
|||||||
"state": "Stable"
|
"state": "Stable"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"x-immich-permission": "job.create",
|
||||||
"x-immich-state": "Stable"
|
"x-immich-state": "Stable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -14618,6 +14620,7 @@
|
|||||||
"state": "Stable"
|
"state": "Stable"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"x-immich-permission": "folder.read",
|
||||||
"x-immich-state": "Stable"
|
"x-immich-state": "Stable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -14670,6 +14673,7 @@
|
|||||||
"state": "Stable"
|
"state": "Stable"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"x-immich-permission": "folder.read",
|
||||||
"x-immich-state": "Stable"
|
"x-immich-state": "Stable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -18959,6 +18963,7 @@
|
|||||||
"face.read",
|
"face.read",
|
||||||
"face.update",
|
"face.update",
|
||||||
"face.delete",
|
"face.delete",
|
||||||
|
"folder.read",
|
||||||
"job.create",
|
"job.create",
|
||||||
"job.read",
|
"job.read",
|
||||||
"library.create",
|
"library.create",
|
||||||
|
|||||||
@@ -5524,6 +5524,7 @@ export enum Permission {
|
|||||||
FaceRead = "face.read",
|
FaceRead = "face.read",
|
||||||
FaceUpdate = "face.update",
|
FaceUpdate = "face.update",
|
||||||
FaceDelete = "face.delete",
|
FaceDelete = "face.delete",
|
||||||
|
FolderRead = "folder.read",
|
||||||
JobCreate = "job.create",
|
JobCreate = "job.create",
|
||||||
JobRead = "job.read",
|
JobRead = "job.read",
|
||||||
LibraryCreate = "library.create",
|
LibraryCreate = "library.create",
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ export class AssetMediaController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Post('exist')
|
@Post('exist')
|
||||||
@Authenticated()
|
@Authenticated({ permission: Permission.AssetUpload })
|
||||||
@Endpoint({
|
@Endpoint({
|
||||||
summary: 'Check existing assets',
|
summary: 'Check existing assets',
|
||||||
description: 'Checks if multiple assets exist on the server and returns all existing - used by background backup',
|
description: 'Checks if multiple assets exist on the server and returns all existing - used by background backup',
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ export class AssetController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Post('jobs')
|
@Post('jobs')
|
||||||
@Authenticated()
|
@Authenticated({ permission: Permission.JobCreate })
|
||||||
@HttpCode(HttpStatus.NO_CONTENT)
|
@HttpCode(HttpStatus.NO_CONTENT)
|
||||||
@Endpoint({
|
@Endpoint({
|
||||||
summary: 'Run an asset job',
|
summary: 'Run an asset job',
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { ApiTags } from '@nestjs/swagger';
|
|||||||
import { Endpoint, HistoryBuilder } from 'src/decorators';
|
import { Endpoint, HistoryBuilder } from 'src/decorators';
|
||||||
import { AssetResponseDto } from 'src/dtos/asset-response.dto';
|
import { AssetResponseDto } from 'src/dtos/asset-response.dto';
|
||||||
import { AuthDto } from 'src/dtos/auth.dto';
|
import { AuthDto } from 'src/dtos/auth.dto';
|
||||||
import { ApiTag } from 'src/enum';
|
import { ApiTag, Permission } from 'src/enum';
|
||||||
import { Auth, Authenticated } from 'src/middleware/auth.guard';
|
import { Auth, Authenticated } from 'src/middleware/auth.guard';
|
||||||
import { ViewService } from 'src/services/view.service';
|
import { ViewService } from 'src/services/view.service';
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ export class ViewController {
|
|||||||
constructor(private service: ViewService) {}
|
constructor(private service: ViewService) {}
|
||||||
|
|
||||||
@Get('folder/unique-paths')
|
@Get('folder/unique-paths')
|
||||||
@Authenticated()
|
@Authenticated({ permission: Permission.FolderRead })
|
||||||
@Endpoint({
|
@Endpoint({
|
||||||
summary: 'Retrieve unique paths',
|
summary: 'Retrieve unique paths',
|
||||||
description: 'Retrieve a list of unique folder paths from asset original paths.',
|
description: 'Retrieve a list of unique folder paths from asset original paths.',
|
||||||
@@ -24,7 +24,7 @@ export class ViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Get('folder')
|
@Get('folder')
|
||||||
@Authenticated()
|
@Authenticated({ permission: Permission.FolderRead })
|
||||||
@Endpoint({
|
@Endpoint({
|
||||||
summary: 'Retrieve assets by original path',
|
summary: 'Retrieve assets by original path',
|
||||||
description: 'Retrieve assets that are children of a specific folder.',
|
description: 'Retrieve assets that are children of a specific folder.',
|
||||||
|
|||||||
@@ -146,6 +146,8 @@ export enum Permission {
|
|||||||
FaceUpdate = 'face.update',
|
FaceUpdate = 'face.update',
|
||||||
FaceDelete = 'face.delete',
|
FaceDelete = 'face.delete',
|
||||||
|
|
||||||
|
FolderRead = 'folder.read',
|
||||||
|
|
||||||
JobCreate = 'job.create',
|
JobCreate = 'job.create',
|
||||||
JobRead = 'job.read',
|
JobRead = 'job.read',
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user