Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
97a90d6
refactor: migrate cedar policy and group management to Angular signals
gugu Mar 25, 2026
cba862f
feat: add cedar-wasm policy validation and permission service
gugu Mar 25, 2026
3a692f0
refactor: replace old permission checks with CedarPermissionService.canI
gugu Mar 25, 2026
7948498
refactor: replace remaining permission checks with CedarPermissionSer…
gugu Mar 25, 2026
54b9a6e
refactor: simplify permission handling by centralizing canEditConnect…
gugu Mar 26, 2026
9069b24
fix: refresh groups directly in saveCedarPolicy to ensure permissions…
gugu Mar 26, 2026
d012a4c
fix: dashboard:create action should not require a resource parameter
gugu Mar 26, 2026
9993894
permissions: fix tracking field of member object
lyubov-voloshko Mar 27, 2026
8482771
fix: add-user-to-group button was not submitting the form
gugu Mar 27, 2026
e652dd1
merge: resolve conflict keeping both canEditConnection and !isConfigu…
gugu Mar 27, 2026
4b5dba4
partial permissions support
gugu Mar 28, 2026
8c4397c
extract demo-login into separate component, improve hostname validator
gugu Apr 3, 2026
5de6a06
Merge branch 'main' into migrate-cedar-policy-groups-to-signals
gugu Apr 6, 2026
2e79f6e
permissions: add View as group + make merged Cedar policies resilient
gugu Apr 7, 2026
d7c4ab7
Merge branch 'main' into migrate-cedar-policy-groups-to-signals
gugu Apr 7, 2026
b76ba10
fix: avoid < in own-connections @if to satisfy Angular and Biome
gugu Apr 7, 2026
15c7ffb
fix: wrap empty-password early return in Promise.resolve
gugu Apr 8, 2026
ac0960a
Merge branch 'main' into migrate-cedar-policy-groups-to-signals
gugu Apr 8, 2026
759336d
Merge branch 'main' into migrate-cedar-policy-groups-to-signals
gugu Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import * as cedarWasm from '@cedar-policy/cedar-wasm/nodejs';
import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common';
import { IGlobalDatabaseContext } from '../../common/application/global-database-context.interface.js';
import { BaseType } from '../../common/data-injection.tokens.js';
import { AccessLevelEnum } from '../../enums/index.js';
import { Messages } from '../../exceptions/text/messages.js';
import { Cacher } from '../../helpers/cache/cacher.js';
import { IGlobalDatabaseContext } from '../../common/application/global-database-context.interface.js';
import { BaseType } from '../../common/data-injection.tokens.js';
import { GroupEntity } from '../group/group.entity.js';
import { ITablePermissionData } from '../permission/permission.interface.js';
import { CedarAction, CedarResourceType, CEDAR_ACTION_TYPE, CEDAR_USER_TYPE } from './cedar-action-map.js';
import { IUserAccessRepository } from '../user-access/repository/user-access.repository.interface.js';
import { CEDAR_ACTION_TYPE, CEDAR_USER_TYPE, CedarAction, CedarResourceType } from './cedar-action-map.js';
import { buildCedarEntities } from './cedar-entity-builder.js';
import { CEDAR_SCHEMA } from './cedar-schema.js';
import * as cedarWasm from '@cedar-policy/cedar-wasm/nodejs';
import { IUserAccessRepository } from '../user-access/repository/user-access.repository.interface.js';

interface EvalContext {
userGroups: Array<GroupEntity>;
Expand Down Expand Up @@ -435,5 +435,4 @@ export class CedarPermissionsService implements IUserAccessRepository {

return { userGroups, policies };
}

}
2 changes: 1 addition & 1 deletion backend/src/entities/connection/connection.entity.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { ConnectionTypesEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
import { Expose } from 'class-transformer';
import { nanoid } from 'nanoid';
import {
Expand All @@ -12,7 +13,6 @@ import {
PrimaryColumn,
Relation,
} from 'typeorm';
import { ConnectionTypesEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
import { Encryptor } from '../../helpers/encryption/encryptor.js';
import { isConnectionTypeAgent } from '../../helpers/index.js';
import { AgentEntity } from '../agent/agent.entity.js';
Expand Down
2 changes: 1 addition & 1 deletion backend/src/entities/connection/connection.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ import { RefreshConnectionAgentTokenUseCase } from './use-cases/refresh-connecti
import { RestoreConnectionUseCase } from './use-cases/restore-connection-use.case.js';
import { TestConnectionUseCase } from './use-cases/test-connection.use.case.js';
import { UnfreezeConnectionUseCase } from './use-cases/unfreeze-connection.use.case.js';
import { UpdateConnectionTitleUseCase } from './use-cases/update-connection-title.use.case.js';
import { UpdateConnectionUseCase } from './use-cases/update-connection.use.case.js';
import { UpdateConnectionMasterPasswordUseCase } from './use-cases/update-connection-master-password.use.case.js';
import { UpdateConnectionTitleUseCase } from './use-cases/update-connection-title.use.case.js';
import { ValidateConnectionMasterPasswordUseCase } from './use-cases/validate-connection-master-password.use.case.js';
import { ValidateConnectionTokenUseCase } from './use-cases/validate-connection-token.use.case.js';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ export const customConnectionRepositoryExtension: IConnectionRepository &
return isTestConnectionUtil(foundConnection);
},

async saveUpdatedConnection(connection: ConnectionEntity): Promise<ConnectionEntity> {
saveUpdatedConnection(connection: ConnectionEntity): Promise<ConnectionEntity> {
return this.save(connection);
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import { CreateConnectionDs } from '../application/data-structures/create-connec
import { TestConnectionResultDs } from '../application/data-structures/test-connection-result.ds.js';
import { UpdateConnectionDs } from '../application/data-structures/update-connection.ds.js';
import { ConnectionEntity } from '../connection.entity.js';
import { decryptConnectionCredentialsAsync } from '../utils/decrypt-connection-credentials-async.js';
import { isHostAllowed } from '../utils/is-host-allowed.js';
import { processAWSConnection } from '../utils/process-aws-connection.util.js';
import { decryptConnectionCredentialsAsync } from '../utils/decrypt-connection-credentials-async.js';
import { ITestConnection } from './use-cases.interfaces.js';

@Injectable()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { TableActionEventEnum } from '../../../../enums/table-action-event-enum.js';
import { decryptConnectionCredentialsAsync, decryptConnectionsCredentialsAsync } from '../../../connection/utils/decrypt-connection-credentials-async.js';
import {
decryptConnectionCredentialsAsync,
decryptConnectionsCredentialsAsync,
} from '../../../connection/utils/decrypt-connection-credentials-async.js';
import { ActionRulesEntity } from '../action-rules.entity.js';
import { IActionRulesRepository } from './action-rules-custom-repository.interface.js';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const userCustomRepositoryExtension: IUserRepository = {
return await userQb.getOne();
},

async findOneUserByEmail(
findOneUserByEmail(
email: string,
externalRegistrationProvider: ExternalRegistrationProviderEnum = null,
samlNameId: string = null,
Expand Down
8 changes: 4 additions & 4 deletions backend/src/helpers/encryption/encryptor.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/** biome-ignore-all lint/complexity/noStaticOnlyClass: <explanation> */
/** biome-ignore-all lint/complexity/noStaticOnlyClass: utility class with only static encryption methods */
import argon2 from 'argon2';
import bcrypt from 'bcrypt';
import crypto, { createHmac, randomBytes, scrypt } from 'crypto';
Expand Down Expand Up @@ -294,7 +294,7 @@ export class Encryptor {
}
}

static async scryptHash(data: string): Promise<string> {
static scryptHash(data: string): Promise<string> {
return new Promise((resolve, reject) => {
const salt = randomBytes(16).toString('hex');
scrypt(data, salt, 64, (err, derivedData) => {
Expand All @@ -304,8 +304,8 @@ export class Encryptor {
});
}

static async hashUserPassword(password: string): Promise<string> {
if (!password || password.length <= 0) return password;
static hashUserPassword(password: string): Promise<string> {
if (!password || password.length <= 0) return Promise.resolve(password);
return new Promise<string>((resolve, reject) => {
const salt = crypto.randomBytes(Constants.PASSWORD_SALT_LENGTH).toString(Constants.BYTE_TO_STRING_ENCODING);
crypto.pbkdf2(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ import { InTransactionEnum } from '../../enums/in-transaction.enum.js';
import { Messages } from '../../exceptions/text/messages.js';
import { SentryInterceptor } from '../../interceptors/sentry.interceptor.js';
import { CreatedConnectionResponse, SuccessResponse } from './data-structures/common-responce.ds.js';
import { FoundConnectionInfoRO } from './data-structures/found-connection-info.ro.js';
import { CreateConnectionForHostedDbDto } from './data-structures/create-connecttion-for-selfhosted-db.dto.js';
import { DeleteConnectionForHostedDbDto } from './data-structures/delete-connection-for-hosted-db.dto.js';
import { FoundConnectionInfoRO } from './data-structures/found-connection-info.ro.js';
import { GetConnectionsInfoByIdsDS } from './data-structures/get-connections-info-by-ids.ds.js';
import { RegisterCompanyWebhookDS } from './data-structures/register-company.ds.js';
import { RegisteredCompanyDS } from './data-structures/registered-company.ds.js';
Expand Down
2 changes: 1 addition & 1 deletion backend/src/microservices/saas-microservice/saas.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { SaasController } from './saas.controller.js';
import { CreateConnectionForHostedDbUseCase } from './use-cases/create-connection-for-hosted-db.use.case.js';
import { DeleteConnectionForHostedDbUseCase } from './use-cases/delete-connection-for-hosted-db.use.case.js';
import { FreezeConnectionsInCompanyUseCase } from './use-cases/freeze-connections-in-company.use.case.js';
import { GetConnectionsInfoByIdsUseCase } from './use-cases/get-connections-info-by-ids.use.case.js';
import { GetFullCompanyInfoByUserIdUseCase } from './use-cases/get-full-company-info-by-user-id.use.case.js';
import { GetUserInfoUseCase } from './use-cases/get-user-info.use.case.js';
import { GetUsersCountInCompanyByIdUseCase } from './use-cases/get-users-count-in-company.use.case.js';
Expand All @@ -23,7 +24,6 @@ import { SaasUsualRegisterUseCase } from './use-cases/saas-usual-register-user.u
import { SuspendUsersUseCase } from './use-cases/suspend-users.use.case.js';
import { SuspendUsersOverLimitUseCase } from './use-cases/suspend-users-over-limit.use.case.js';
import { UnFreezeConnectionsInCompanyUseCase } from './use-cases/unfreeze-connections-in-company-use.case.js';
import { GetConnectionsInfoByIdsUseCase } from './use-cases/get-connections-info-by-ids.use.case.js';
import { UpdateHostedConnectionPasswordUseCase } from './use-cases/update-hosted-connection-password.use.case.js';

@Module({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { CompanyInfoEntity } from '../../../entities/company-info/company-info.entity.js';
import { CreatedConnectionDTO } from '../../../entities/connection/application/dto/created-connection.dto.js';
import { FoundConnectionInfoRO } from '../data-structures/found-connection-info.ro.js';
import { SaaSRegisterDemoUserAccountDS } from '../../../entities/user/application/data-structures/demo-user-account-register.ds.js';
import { SaasUsualUserRegisterDS } from '../../../entities/user/application/data-structures/usual-register-user.ds.js';
import { FoundUserDto } from '../../../entities/user/dto/found-user.dto.js';
Expand All @@ -9,6 +8,7 @@ import { InTransactionEnum } from '../../../enums/in-transaction.enum.js';
import { CreatedConnectionResponse, SuccessResponse } from '../data-structures/common-responce.ds.js';
import { CreateConnectionForHostedDbDto } from '../data-structures/create-connecttion-for-selfhosted-db.dto.js';
import { DeleteConnectionForHostedDbDto } from '../data-structures/delete-connection-for-hosted-db.dto.js';
import { FoundConnectionInfoRO } from '../data-structures/found-connection-info.ro.js';
import { FreezeConnectionsInCompanyDS } from '../data-structures/freeze-connections-in-company.ds.js';
import { GetConnectionsInfoByIdsDS } from '../data-structures/get-connections-info-by-ids.ds.js';
import { GetUserInfoByIdDS } from '../data-structures/get-user-info.ds.js';
Expand Down
Loading
Loading