feat: add 'other' product type for miscellaneous sites (tracking only, no remote control)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 16:52:23 +03:30
co-authored by Cursor
parent 0c29222e9d
commit 674da4e939
13 changed files with 34 additions and 15 deletions
+6 -6
View File
@@ -49,7 +49,7 @@ export class TenantsController {
) {}
@Get()
@RequirePermissions('hamkar:read', 'khanegi:read', { mode: 'any' })
@RequirePermissions('hamkar:read', 'khanegi:read', 'others:read', { mode: 'any' })
async findAll(
@Query('product') product?: ProductType,
@CurrentUser() user?: AuthUser,
@@ -65,7 +65,7 @@ export class TenantsController {
}
@Post('upload-avatar')
@RequirePermissions('hamkar:write', 'khanegi:write', { mode: 'any' })
@RequirePermissions('hamkar:write', 'khanegi:write', 'others:write', { mode: 'any' })
@UseInterceptors(
FileInterceptor('file', {
storage: diskStorage({
@@ -103,7 +103,7 @@ export class TenantsController {
}
@Get(':id')
@RequirePermissions('hamkar:read', 'khanegi:read', { mode: 'any' })
@RequirePermissions('hamkar:read', 'khanegi:read', 'others:read', { mode: 'any' })
async findOne(@Param('id') id: string, @CurrentUser() user: AuthUser) {
const tenant = await this.tenantsService.findOne(id);
this.assertProductAccess(user, tenant.product, 'read');
@@ -111,14 +111,14 @@ export class TenantsController {
}
@Post()
@RequirePermissions('hamkar:write', 'khanegi:write', { mode: 'any' })
@RequirePermissions('hamkar:write', 'khanegi:write', 'others:write', { mode: 'any' })
create(@Body() dto: CreateTenantDto, @CurrentUser() user: AuthUser) {
this.assertProductAccess(user, dto.product, 'write');
return this.tenantsService.create(dto, user.id);
}
@Patch(':id')
@RequirePermissions('hamkar:write', 'khanegi:write', { mode: 'any' })
@RequirePermissions('hamkar:write', 'khanegi:write', 'others:write', { mode: 'any' })
async update(
@Param('id') id: string,
@Body() dto: UpdateTenantDto,
@@ -130,7 +130,7 @@ export class TenantsController {
}
@Delete(':id')
@RequirePermissions('hamkar:write', 'khanegi:write', { mode: 'any' })
@RequirePermissions('hamkar:write', 'khanegi:write', 'others:write', { mode: 'any' })
async remove(@Param('id') id: string, @CurrentUser() user: AuthUser) {
const tenant = await this.tenantsService.findOne(id);
this.assertProductAccess(user, tenant.product, 'write');