Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
554cde5
refactor media board UCs
hoeppner-dataport Feb 2, 2026
e581696
chore: fix tests
hoeppner-dataport Feb 2, 2026
16acd6f
Merge branch 'main' of https://github.com/hpi-schul-cloud/schulcloud-…
hoeppner-dataport Feb 2, 2026
af54a11
chore: fix test
hoeppner-dataport Feb 3, 2026
1a49612
chore: add tests
hoeppner-dataport Feb 3, 2026
54d7a10
Merge branch 'main' of https://github.com/hpi-schul-cloud/schulcloud-…
hoeppner-dataport Feb 3, 2026
2311dfa
delete BoardNodePermissionService
hoeppner-dataport Feb 3, 2026
fdeabe7
rename roomMembershipAuthorizable to roomAuthorizable
hoeppner-dataport Feb 3, 2026
6adc7f8
chore: fix imports
hoeppner-dataport Feb 3, 2026
4191cbe
chore: rename roomMemberahipAuthprizable also in tests
hoeppner-dataport Feb 3, 2026
e88ff76
Merge branch 'main' of https://github.com/hpi-schul-cloud/schulcloud-…
hoeppner-dataport Feb 3, 2026
1d65158
move private method getRoomRuleOfUser into authorizable
hoeppner-dataport Feb 3, 2026
8a8e957
rename room-membership.rule.ts to room.rule.ts
hoeppner-dataport Feb 3, 2026
75289c1
chore: smaller changes
hoeppner-dataport Feb 4, 2026
83a1776
chore: fix board-context-service
hoeppner-dataport Feb 4, 2026
862b322
chore: adapt video-conference tests
hoeppner-dataport Feb 4, 2026
cc7fe95
chore: complete coverage
hoeppner-dataport Feb 4, 2026
59650fb
Merge branch 'main' of https://github.com/hpi-schul-cloud/schulcloud-…
hoeppner-dataport Feb 4, 2026
0b9a820
Merge branch 'main' into bc-11019-mediaboard-permissions
hoeppner-dataport Feb 9, 2026
a9454b4
Merge branch 'main' into bc-11019-mediaboard-permissions
hoeppner-dataport Feb 9, 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
39 changes: 36 additions & 3 deletions apps/server/src/modules/board/authorisation/board-node.rule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
isDrawingElement,
isSubmissionItem,
isSubmissionItemContent,
MediaBoard,
SubmissionItem,
UserWithBoardRoles,
} from '@modules/board';
Expand Down Expand Up @@ -113,6 +114,18 @@ export class BoardNodeRule implements Rule<BoardNodeAuthorizable> {
return this.canEditBoard(user, authorizable);
}

public canCreateMediaBoardLine(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canDeleteMediaBoardLine(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canUpdateMediaBoardLine(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canCreateSubmissionItemContent(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.isSubmissionItemOfUser(user, authorizable);
}
Expand Down Expand Up @@ -165,6 +178,10 @@ export class BoardNodeRule implements Rule<BoardNodeAuthorizable> {
return this.canEditBoard(user, authorizable);
}

public canMoveElement(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canCopyBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canManageBoard(user, authorizable);
}
Expand All @@ -182,6 +199,18 @@ export class BoardNodeRule implements Rule<BoardNodeAuthorizable> {
return isBoard && canManageReadersCanEdit;
}

public canUpdateMediaBoardColor(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canUpdateMediaBoardLayout(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canCollapseMediaBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canEditBoard(user, authorizable);
}

public canUpdateBoardLayout(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canManageBoard(user, authorizable);
}
Expand All @@ -194,6 +223,10 @@ export class BoardNodeRule implements Rule<BoardNodeAuthorizable> {
return this.canViewBoard(user, authorizable);
}

public canViewMediaBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
return this.canViewBoard(user, authorizable);
}

public canRelocateContent(user: User, authorizable: BoardNodeAuthorizable): boolean {
const permissions = authorizable.getUserPermissions(user.id);

Expand Down Expand Up @@ -330,23 +363,23 @@ export class BoardNodeRule implements Rule<BoardNodeAuthorizable> {
private canEditBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
const permissions = authorizable.getUserPermissions(user.id);

const isBoard = authorizable.rootNode instanceof ColumnBoard;
const isBoard = authorizable.rootNode instanceof ColumnBoard || authorizable.rootNode instanceof MediaBoard;
const canEditBoard = permissions.includes(Permission.BOARD_EDIT);
return isBoard && canEditBoard;
}

private canManageBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
const permissions = authorizable.getUserPermissions(user.id);

const isBoard = authorizable.rootNode instanceof ColumnBoard;
const isBoard = authorizable.rootNode instanceof ColumnBoard || authorizable.rootNode instanceof MediaBoard;
const canManageBoard = permissions.includes(Permission.BOARD_MANAGE);
return isBoard && canManageBoard;
}

private canViewBoard(user: User, authorizable: BoardNodeAuthorizable): boolean {
const permissions = authorizable.getUserPermissions(user.id);

const isBoard = authorizable.rootNode instanceof ColumnBoard;
const isBoard = authorizable.rootNode instanceof ColumnBoard || authorizable.rootNode instanceof MediaBoard;
const canViewBoard = permissions.includes(Permission.BOARD_VIEW);
return isBoard && canViewBoard;
}
Expand Down
12 changes: 1 addition & 11 deletions apps/server/src/modules/board/board-api.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import {
ElementController,
} from './controller';
import { CopyRoomBoardsStep } from './saga';
import { BoardNodePermissionService } from './service';
import { BoardErrorReportUc, BoardUc, CardUc, ColumnUc, ElementUc, SubmissionItemUc } from './uc';

@Module({
Expand All @@ -40,15 +39,6 @@ import { BoardErrorReportUc, BoardUc, CardUc, ColumnUc, ElementUc, SubmissionIte
BoardSubmissionController,
BoardErrorReportController,
],
providers: [
BoardUc,
BoardNodePermissionService,
BoardErrorReportUc,
ColumnUc,
CardUc,
ElementUc,
SubmissionItemUc,
CopyRoomBoardsStep,
],
providers: [BoardUc, BoardErrorReportUc, ColumnUc, CardUc, ElementUc, SubmissionItemUc, CopyRoomBoardsStep],
})
export class BoardApiModule {}
11 changes: 1 addition & 10 deletions apps/server/src/modules/board/board-ws-api.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { forwardRef, Module } from '@nestjs/common';
import { BoardModule } from './board.module';
import { BoardCollaborationGateway } from './gateway/board-collaboration.gateway';
import { MetricsService } from './metrics/metrics.service';
import { BoardNodePermissionService } from './service';
import { BoardUc, CardUc, ColumnUc, ElementUc } from './uc';

@Module({
Expand All @@ -23,15 +22,7 @@ import { BoardUc, CardUc, ColumnUc, ElementUc } from './uc';
RoomModule,
BoardContextApiHelperModule,
],
providers: [
BoardCollaborationGateway,
BoardNodePermissionService,
CardUc,
ColumnUc,
ElementUc,
BoardUc,
MetricsService,
],
providers: [BoardCollaborationGateway, CardUc, ColumnUc, ElementUc, BoardUc, MetricsService],
exports: [],
})
export class BoardWsApiModule {}
3 changes: 2 additions & 1 deletion apps/server/src/modules/board/board.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { CqrsModule } from '@nestjs/cqrs';
import { AuthorizationModule } from '../authorization';
import { RoomMembershipModule } from '../room-membership';
import { BoardNodeRule } from './authorisation/board-node.rule';
import { BoardNodeFactory } from './domain';
import { BoardNodeFactory, MediaBoardNodeFactory } from './domain';
import { BoardNodeRepo } from './repo';
import { BoardNodeEventSubscriber } from './repo/board-node-event-subscriber';
import {
Expand Down Expand Up @@ -78,6 +78,7 @@ import {
ColumnBoardTitleService,
ContextExternalToolDeletedEventHandlerService,
// TODO replace by import of MediaBoardModule (fix dependency cycle)
MediaBoardNodeFactory,
MediaBoardService,
BoardNodeEventSubscriber,
],
Expand Down
14 changes: 3 additions & 11 deletions apps/server/src/modules/board/media-board-api.module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { LoggerModule } from '@core/logger';
import { AuthorizationModule } from '@modules/authorization';
import { SagaModule } from '@modules/saga';
import { SchoolLicenseModule } from '@modules/school-license';
import { UserModule } from '@modules/user';
import { UserLicenseModule } from '@modules/user-license';
Expand All @@ -8,10 +9,8 @@ import { ToolModule } from '../tool';
import { BoardModule } from './board.module';
import { MediaBoardController, MediaElementController, MediaLineController } from './controller';
import { MediaBoardModule } from './media-board.module';
import { BoardNodePermissionService } from './service';
import { MediaAvailableLineUc, MediaBoardUc, MediaElementUc, MediaLineUc } from './uc';
import { SagaModule } from '@modules/saga';
import { DeleteUserBoardDataStep } from './saga';
import { MediaAvailableLineUc, MediaBoardUc, MediaElementUc, MediaLineUc } from './uc';

@Module({
imports: [
Expand All @@ -26,13 +25,6 @@ import { DeleteUserBoardDataStep } from './saga';
SagaModule,
],
controllers: [MediaBoardController, MediaLineController, MediaElementController],
providers: [
BoardNodePermissionService,
MediaBoardUc,
MediaLineUc,
MediaElementUc,
MediaAvailableLineUc,
DeleteUserBoardDataStep,
],
providers: [MediaBoardUc, MediaLineUc, MediaElementUc, MediaAvailableLineUc, DeleteUserBoardDataStep],
})
export class MediaBoardApiModule {}

This file was deleted.

Loading
Loading