feat: cluster group admin permission for regenerate people (#32787)
(cherry picked from commit 9f273a604d5bdbd9583758c3a79d2fc0141c7a77)
This commit is contained in:
@@ -6343,7 +6343,7 @@
|
|||||||
"state": "Added"
|
"state": "Added"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"x-immich-permission": "clusterGroup.read"
|
"x-immich-permission": "clusterGroup.admin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/cluster-groups/{id}/requests": {
|
"/cluster-groups/{id}/requests": {
|
||||||
@@ -25811,6 +25811,7 @@
|
|||||||
"backup.delete",
|
"backup.delete",
|
||||||
"clusterGroup.read",
|
"clusterGroup.read",
|
||||||
"clusterGroup.leave",
|
"clusterGroup.leave",
|
||||||
|
"clusterGroup.admin",
|
||||||
"clusterGroupRequest.create",
|
"clusterGroupRequest.create",
|
||||||
"clusterGroupRequest.read",
|
"clusterGroupRequest.read",
|
||||||
"clusterGroupRequest.delete",
|
"clusterGroupRequest.delete",
|
||||||
|
|||||||
@@ -8351,6 +8351,7 @@ export enum Permission {
|
|||||||
BackupDelete = "backup.delete",
|
BackupDelete = "backup.delete",
|
||||||
ClusterGroupRead = "clusterGroup.read",
|
ClusterGroupRead = "clusterGroup.read",
|
||||||
ClusterGroupLeave = "clusterGroup.leave",
|
ClusterGroupLeave = "clusterGroup.leave",
|
||||||
|
ClusterGroupAdmin = "clusterGroup.admin",
|
||||||
ClusterGroupRequestCreate = "clusterGroupRequest.create",
|
ClusterGroupRequestCreate = "clusterGroupRequest.create",
|
||||||
ClusterGroupRequestRead = "clusterGroupRequest.read",
|
ClusterGroupRequestRead = "clusterGroupRequest.read",
|
||||||
ClusterGroupRequestDelete = "clusterGroupRequest.delete",
|
ClusterGroupRequestDelete = "clusterGroupRequest.delete",
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ export class ClusterGroupController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Post(':id/regenerate-people')
|
@Post(':id/regenerate-people')
|
||||||
@Authenticated({ permission: Permission.ClusterGroupRead })
|
@Authenticated({ permission: Permission.ClusterGroupAdmin })
|
||||||
@HttpCode(HttpStatus.NO_CONTENT)
|
@HttpCode(HttpStatus.NO_CONTENT)
|
||||||
@Endpoint({
|
@Endpoint({
|
||||||
summary: 'Regenerate people of users in cluster group',
|
summary: 'Regenerate people of users in cluster group',
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ export enum Permission {
|
|||||||
|
|
||||||
ClusterGroupRead = 'clusterGroup.read',
|
ClusterGroupRead = 'clusterGroup.read',
|
||||||
ClusterGroupLeave = 'clusterGroup.leave',
|
ClusterGroupLeave = 'clusterGroup.leave',
|
||||||
|
ClusterGroupAdmin = 'clusterGroup.admin',
|
||||||
ClusterGroupRequestCreate = 'clusterGroupRequest.create',
|
ClusterGroupRequestCreate = 'clusterGroupRequest.create',
|
||||||
ClusterGroupRequestRead = 'clusterGroupRequest.read',
|
ClusterGroupRequestRead = 'clusterGroupRequest.read',
|
||||||
ClusterGroupRequestDelete = 'clusterGroupRequest.delete',
|
ClusterGroupRequestDelete = 'clusterGroupRequest.delete',
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export class ClusterGroupService extends BaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async regeneratePeople(auth: AuthDto, id: string) {
|
async regeneratePeople(auth: AuthDto, id: string) {
|
||||||
await this.requireAccess({ auth, permission: Permission.ClusterGroupRead, ids: [id] });
|
await this.requireAccess({ auth, permission: Permission.ClusterGroupAdmin, ids: [id] });
|
||||||
|
|
||||||
await this.jobRepository.queue({
|
await this.jobRepository.queue({
|
||||||
name: JobName.FacialRecognitionQueueAll,
|
name: JobName.FacialRecognitionQueueAll,
|
||||||
|
|||||||
@@ -356,6 +356,10 @@ const checkOtherAccess = async (access: AccessRepository, request: OtherAccessRe
|
|||||||
return access.person.checkFaceOwnerAccess(auth.user.id, ids);
|
return access.person.checkFaceOwnerAccess(auth.user.id, ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Permission.ClusterGroupAdmin: {
|
||||||
|
return access.clusterGroup.checkOwnerAccess(auth.user.id, ids);
|
||||||
|
}
|
||||||
|
|
||||||
case Permission.ClusterGroupRead: {
|
case Permission.ClusterGroupRead: {
|
||||||
const isMember = await access.clusterGroup.checkOwnerAccess(auth.user.id, ids);
|
const isMember = await access.clusterGroup.checkOwnerAccess(auth.user.id, ids);
|
||||||
const isInvited = await access.clusterGroup.checkInviteAccess(auth.user.id, setDifference(ids, isMember));
|
const isInvited = await access.clusterGroup.checkInviteAccess(auth.user.id, setDifference(ids, isMember));
|
||||||
|
|||||||
Reference in New Issue
Block a user