Skip to content

Commit b8764be

Browse files
authored
Merge pull request #1664 from rocket-admin/backend_ceadr_permissions_fixing
fix ceadr policies
2 parents 9a19ae0 + 2238fc7 commit b8764be

File tree

5 files changed

+3269
-1
lines changed

5 files changed

+3269
-1
lines changed

backend/src/entities/cedar-authorization/scripts/migrate-permissions-to-cedar.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ export async function migratePermissionsToCedar(dataSource: DataSource): Promise
88
const groupRepository = dataSource.getRepository(GroupEntity);
99
let migratedCount = 0;
1010

11+
// Migrate groups with no Cedar policy OR groups with old-format policies (using "principal in" instead of bare "principal")
1112
const groups = await groupRepository
1213
.createQueryBuilder('group')
1314
.leftJoinAndSelect('group.connection', 'connection')
1415
.leftJoinAndSelect('group.permissions', 'permission')
15-
.where('group.cedarPolicy IS NULL OR group.cedarPolicy = :empty', { empty: '' })
16+
.where('group.cedarPolicy IS NULL OR group.cedarPolicy = :empty OR group.cedarPolicy LIKE :oldFormat', {
17+
empty: '',
18+
oldFormat: '%principal in RocketAdmin::Group%',
19+
})
1620
.getMany();
1721

1822
for (const group of groups) {

backend/src/entities/demo-data/demo-data.service.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
22
import { ConnectionTypesEnum } from '@rocketadmin/shared-code/dist/src/shared/enums/connection-types-enum.js';
33
import { IGlobalDatabaseContext } from '../../common/application/global-database-context.interface.js';
44
import { BaseType } from '../../common/data-injection.tokens.js';
5+
import { AccessLevelEnum } from '../../enums/access-level.enum.js';
56
import { FilterCriteriaEnum } from '../../enums/filter-criteria.enum.js';
67
import { TableActionEventEnum } from '../../enums/table-action-event-enum.js';
78
import { TableActionTypeEnum } from '../../enums/table-action-type.enum.js';
@@ -27,6 +28,7 @@ import { TableSettingsEntity } from '../table-settings/common-table-settings/tab
2728
import { buildNewTableSettingsEntity } from '../table-settings/common-table-settings/utils/build-new-table-settings-entity.js';
2829
import { buildConnectionEntitiesFromTestDtos } from '../user/utils/build-connection-entities-from-test-dtos.js';
2930
import { buildDefaultAdminGroups } from '../user/utils/build-default-admin-groups.js';
31+
import { generateCedarPolicyForGroup } from '../cedar-authorization/cedar-policy-generator.js';
3032
import { buildDefaultAdminPermissions } from '../user/utils/build-default-admin-permissions.js';
3133
import { CreateTableWidgetDs } from '../widget/application/data-sctructures/create-table-widgets.ds.js';
3234
import { buildNewTableWidgetEntity } from '../widget/utils/build-new-table-widget-entity.js';
@@ -77,6 +79,21 @@ export class DemoDataService {
7779
}),
7880
);
7981

82+
await Promise.all(
83+
createdTestGroups.map(async (group: GroupEntity) => {
84+
const connectionId = group.connection?.id;
85+
if (!connectionId) return;
86+
group.cedarPolicy = generateCedarPolicyForGroup(connectionId, group.isMain, {
87+
connection: { connectionId, accessLevel: AccessLevelEnum.edit },
88+
group: { groupId: group.id, accessLevel: AccessLevelEnum.edit },
89+
tables: [],
90+
});
91+
delete group.permissions;
92+
delete group.users;
93+
await this._dbContext.groupRepository.saveNewOrUpdatedGroup(group);
94+
}),
95+
);
96+
8097
if (!isTest()) {
8198
const createdPostgresConnection = createdTestConnections.find(
8299
(connection) => connection.type === ConnectionTypesEnum.postgres,

backend/src/helpers/constants/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ export const Constants = {
225225
if (!isSaaS || isSaaS !== 'true') {
226226
return [];
227227
}
228+
228229
const testConnections: Array<CreateConnectionDto> = Constants.getTestConnectionsFromDSN() || [];
229230
if (!testConnections.length) {
230231
testConnections.push(

0 commit comments

Comments
 (0)