Skip to content

Commit e93a944

Browse files
committed
wip: refine permissions for publications
1 parent 2421ed1 commit e93a944

File tree

5 files changed

+16
-26
lines changed

5 files changed

+16
-26
lines changed

meteor/server/publications/organization.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { CorelibPubSub } from '@sofie-automation/corelib/dist/pubsub'
1313
import { check, Match } from '../lib/check'
1414
import { getCurrentTime } from '../lib/lib'
1515
import { triggerWriteAccessBecauseNoCheckNecessary } from '../security/securityVerify'
16+
import { assertConnectionHasOneOfPermissions } from '../security/auth'
1617

1718
meteorPublish(
1819
MeteorPubSub.organization,
@@ -39,8 +40,7 @@ meteorPublish(
3940
meteorPublish(
4041
CorelibPubSub.blueprints,
4142
async function (blueprintIds: BlueprintId[] | null, _token: string | undefined) {
42-
// nocommit - is this correct?
43-
triggerWriteAccessBecauseNoCheckNecessary()
43+
assertConnectionHasOneOfPermissions(this.connection, 'configure')
4444

4545
check(blueprintIds, Match.Maybe(Array))
4646

@@ -71,7 +71,7 @@ meteorPublish(MeteorPubSub.evaluations, async function (dateFrom: number, dateTo
7171
return Evaluations.findWithCursor(selector)
7272
})
7373
meteorPublish(MeteorPubSub.snapshots, async function (_token: string | undefined) {
74-
triggerWriteAccessBecauseNoCheckNecessary()
74+
assertConnectionHasOneOfPermissions(this.connection, 'configure')
7575

7676
const selector: MongoQuery<SnapshotItem> = {
7777
created: {

meteor/server/publications/packageManager/packageContainers.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mo
55
import { PackageContainer } from '@sofie-automation/shared-lib/dist/package-manager/package'
66
import { PackageManagerPackageContainers } from '@sofie-automation/shared-lib/dist/package-manager/publications'
77
import { check } from 'meteor/check'
8-
import { Meteor } from 'meteor/meteor'
98
import { ReadonlyDeep } from 'type-fest'
10-
import { PeripheralDevices, Studios } from '../../collections'
9+
import { Studios } from '../../collections'
1110
import {
1211
meteorCustomPublish,
1312
SetupObserversResult,
@@ -20,7 +19,7 @@ import {
2019
PeripheralDevicePubSubCollectionsNames,
2120
} from '@sofie-automation/shared-lib/dist/pubsub/peripheralDevice'
2221
import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
23-
import { triggerWriteAccessBecauseNoCheckNecessary } from '../../security/securityVerify'
22+
import { checkAccessAndGetPeripheralDevice } from '../../security/check'
2423

2524
type StudioFields = '_id' | 'packageContainersWithOverrides'
2625
const studioFieldSpecifier = literal<MongoFieldSpecifierOnesStrict<Pick<DBStudio, StudioFields>>>({
@@ -93,14 +92,10 @@ async function manipulateExpectedPackagesPublicationData(
9392
meteorCustomPublish(
9493
PeripheralDevicePubSub.packageManagerPackageContainers,
9594
PeripheralDevicePubSubCollectionsNames.packageManagerPackageContainers,
96-
async function (pub, deviceId: PeripheralDeviceId, _token: string | undefined) {
95+
async function (pub, deviceId: PeripheralDeviceId, token: string | undefined) {
9796
check(deviceId, String)
9897

99-
triggerWriteAccessBecauseNoCheckNecessary()
100-
101-
const peripheralDevice = await PeripheralDevices.findOneAsync(deviceId)
102-
103-
if (!peripheralDevice) throw new Meteor.Error('PeripheralDevice "' + deviceId + '" not found')
98+
const peripheralDevice = await checkAccessAndGetPeripheralDevice(deviceId, token, this)
10499

105100
const studioId = peripheralDevice.studioId
106101
if (!studioId) {

meteor/server/publications/packageManager/playoutContext.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import { literal } from '@sofie-automation/corelib/dist/lib'
55
import { MongoFieldSpecifierOnesStrict } from '@sofie-automation/corelib/dist/mongo'
66
import { PackageManagerPlayoutContext } from '@sofie-automation/shared-lib/dist/package-manager/publications'
77
import { check } from 'meteor/check'
8-
import { Meteor } from 'meteor/meteor'
98
import { ReadonlyDeep } from 'type-fest'
10-
import { PeripheralDevices, RundownPlaylists, Rundowns } from '../../collections'
9+
import { RundownPlaylists, Rundowns } from '../../collections'
1110
import {
1211
meteorCustomPublish,
1312
SetupObserversResult,
@@ -19,7 +18,7 @@ import {
1918
PeripheralDevicePubSub,
2019
PeripheralDevicePubSubCollectionsNames,
2120
} from '@sofie-automation/shared-lib/dist/pubsub/peripheralDevice'
22-
import { triggerWriteAccessBecauseNoCheckNecessary } from '../../security/securityVerify'
21+
import { checkAccessAndGetPeripheralDevice } from '../../security/check'
2322

2423
export type RundownPlaylistCompact = Pick<DBRundownPlaylist, '_id' | 'activationId' | 'rehearsal' | 'rundownIdsInOrder'>
2524
const rundownPlaylistFieldSpecifier = literal<MongoFieldSpecifierOnesStrict<RundownPlaylistCompact>>({
@@ -111,14 +110,10 @@ async function manipulateExpectedPackagesPublicationData(
111110
meteorCustomPublish(
112111
PeripheralDevicePubSub.packageManagerPlayoutContext,
113112
PeripheralDevicePubSubCollectionsNames.packageManagerPlayoutContext,
114-
async function (pub, deviceId: PeripheralDeviceId, _token: string | undefined) {
113+
async function (pub, deviceId: PeripheralDeviceId, token: string | undefined) {
115114
check(deviceId, String)
116115

117-
triggerWriteAccessBecauseNoCheckNecessary()
118-
119-
const peripheralDevice = await PeripheralDevices.findOneAsync(deviceId)
120-
121-
if (!peripheralDevice) throw new Meteor.Error('PeripheralDevice "' + deviceId + '" not found')
116+
const peripheralDevice = await checkAccessAndGetPeripheralDevice(deviceId, token, this)
122117

123118
const studioId = peripheralDevice.studioId
124119
if (!studioId) {

meteor/server/publications/studio.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ import {
3434
} from '@sofie-automation/shared-lib/dist/pubsub/peripheralDevice'
3535
import { triggerWriteAccessBecauseNoCheckNecessary } from '../security/securityVerify'
3636
import { checkAccessAndGetPeripheralDevice } from '../security/check'
37+
import { assertConnectionHasOneOfPermissions } from '../security/auth'
3738

3839
meteorPublish(CorelibPubSub.studios, async function (studioIds: StudioId[] | null, _token: string | undefined) {
3940
check(studioIds, Match.Maybe(Array))
4041

41-
// nocommit: this is wrong, and will leak secrets to readonly clients
4242
triggerWriteAccessBecauseNoCheckNecessary()
4343

4444
// If values were provided, they must have values
@@ -134,7 +134,7 @@ meteorCustomPublish(
134134
async function (pub, studioId: StudioId, _token: string | undefined) {
135135
check(studioId, String)
136136

137-
triggerWriteAccessBecauseNoCheckNecessary()
137+
assertConnectionHasOneOfPermissions(this.connection, 'testing')
138138

139139
await createObserverForMappingsPublication(pub, studioId)
140140
}

meteor/server/publications/timeline.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ import {
3636
PeripheralDevicePubSubCollectionsNames,
3737
} from '@sofie-automation/shared-lib/dist/pubsub/peripheralDevice'
3838
import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
39-
import { triggerWriteAccessBecauseNoCheckNecessary } from '../security/securityVerify'
4039
import { checkAccessAndGetPeripheralDevice } from '../security/check'
40+
import { assertConnectionHasOneOfPermissions } from '../security/auth'
4141

4242
meteorPublish(CorelibPubSub.timelineDatastore, async function (studioId: StudioId, _token: string | undefined) {
43-
triggerWriteAccessBecauseNoCheckNecessary()
43+
assertConnectionHasOneOfPermissions(this.connection, 'testing')
4444

4545
if (!studioId) throw new Meteor.Error(400, 'selector argument missing')
4646
const modifier: FindOptions<DBTimelineDatastoreEntry> = {
@@ -86,7 +86,7 @@ meteorCustomPublish(
8686
MeteorPubSub.timelineForStudio,
8787
PeripheralDevicePubSubCollectionsNames.studioTimeline,
8888
async function (pub, studioId: StudioId, _token: string | undefined) {
89-
triggerWriteAccessBecauseNoCheckNecessary()
89+
assertConnectionHasOneOfPermissions(this.connection, 'testing')
9090

9191
await createObserverForTimelinePublication(pub, studioId)
9292
}

0 commit comments

Comments
 (0)