feat(gps): фильтры heartbeat-эхо/valid=false/spike; доступ к GPS и Финансам — матрица на /users (пользователи+роли)

This commit is contained in:
2026-08-26 17:13:49 +03:00
parent 2fb7ad6606
commit ac4f89d42e
16 changed files with 431 additions and 227 deletions

View File

@@ -48,6 +48,8 @@ export class RolesStorage extends BillingStorage {
description: roles.description,
parentId: roles.parentId,
managerId: roles.managerId,
gpsAccess: roles.gpsAccess,
financeAccess: roles.financeAccess,
createdAt: roles.createdAt,
}).from(roles).where(eq(roles.organizationId, organizationId)).orderBy(asc(roles.name));
@@ -149,7 +151,7 @@ export class RolesStorage extends BillingStorage {
return role;
}
async updateRole(id: number, organizationId: number, updates: { name?: string; description?: string | null; parentId?: number | null; managerId?: number | null }) {
async updateRole(id: number, organizationId: number, updates: { name?: string; description?: string | null; parentId?: number | null; managerId?: number | null; gpsAccess?: boolean; financeAccess?: boolean }) {
const { roles } = await import('@shared/schema');
if (updates.parentId) {
if (updates.parentId === id) throw new Error('Роль не может быть родителем самой себя');
@@ -256,6 +258,8 @@ export class RolesStorage extends BillingStorage {
description: roles.description,
parentId: roles.parentId,
managerId: roles.managerId,
gpsAccess: roles.gpsAccess,
financeAccess: roles.financeAccess,
createdAt: roles.createdAt,
}).from(roleMembers)
.innerJoin(roles, eq(roleMembers.roleId, roles.id))