Skip to content

Commit 4b105dd

Browse files
authored
Plugin permissions in workspace (#8728)
Signed-off-by: Anton Alexeyev <[email protected]>
1 parent 7f3fd45 commit 4b105dd

File tree

88 files changed

+425
-174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+425
-174
lines changed

models/controlled-documents/src/permissions.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export function definePermissions (builder: Builder): void {
1212
core.space.Model,
1313
{
1414
label: documents.string.ReviewDocumentPermission,
15+
scope: 'space',
1516
description: documents.string.ReviewDocumentDescription
1617
},
1718
documents.permission.ReviewDocument
@@ -22,6 +23,7 @@ export function definePermissions (builder: Builder): void {
2223
core.space.Model,
2324
{
2425
label: documents.string.ApproveDocumentPermission,
26+
scope: 'space',
2527
description: documents.string.ApproveDocumentDescription
2628
},
2729
documents.permission.ApproveDocument
@@ -32,6 +34,7 @@ export function definePermissions (builder: Builder): void {
3234
core.space.Model,
3335
{
3436
label: documents.string.ArchiveDocumentPermission,
37+
scope: 'space',
3538
description: documents.string.ArchiveDocumentDescription
3639
},
3740
documents.permission.ArchiveDocument
@@ -42,6 +45,7 @@ export function definePermissions (builder: Builder): void {
4245
core.space.Model,
4346
{
4447
label: documents.string.CoAuthorDocumentPermission,
48+
scope: 'space',
4549
description: documents.string.CoAuthorDocumentDescription
4650
},
4751
documents.permission.CoAuthorDocument
@@ -52,6 +56,7 @@ export function definePermissions (builder: Builder): void {
5256
core.space.Model,
5357
{
5458
label: documents.string.CreateDocumentPermission,
59+
scope: 'space',
5560
description: documents.string.CreateDocumentDescription
5661
},
5762
documents.permission.CreateDocument
@@ -62,6 +67,7 @@ export function definePermissions (builder: Builder): void {
6267
core.space.Model,
6368
{
6469
label: documents.string.UpdateDocumentOwnerPermission,
70+
scope: 'space',
6571
description: documents.string.UpdateDocumentOwnerDescription
6672
},
6773
documents.permission.UpdateDocumentOwner
@@ -72,6 +78,7 @@ export function definePermissions (builder: Builder): void {
7278
core.space.Model,
7379
{
7480
label: documents.string.CreateDocumentCategoryPermission,
81+
scope: 'space',
7582
description: documents.string.CreateDocumentCategoryDescription
7683
},
7784
documents.permission.CreateDocumentCategory
@@ -82,6 +89,7 @@ export function definePermissions (builder: Builder): void {
8289
core.space.Model,
8390
{
8491
label: documents.string.UpdateDocumentCategoryPermission,
92+
scope: 'space',
8593
description: documents.string.UpdateDocumentCategoryDescription
8694
},
8795
documents.permission.UpdateDocumentCategory
@@ -92,6 +100,7 @@ export function definePermissions (builder: Builder): void {
92100
core.space.Model,
93101
{
94102
label: documents.string.DeleteDocumentCategoryPermission,
103+
scope: 'space',
95104
description: documents.string.DeleteDocumentCategoryDescription
96105
},
97106
documents.permission.DeleteDocumentCategory

models/core/src/permissions.ts

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export function definePermissions (builder: Builder): void {
2323
core.space.Model,
2424
{
2525
label: core.string.CreateObject,
26+
scope: 'space',
2627
description: core.string.CreateObjectDescription
2728
},
2829
core.permission.CreateObject
@@ -33,6 +34,7 @@ export function definePermissions (builder: Builder): void {
3334
core.space.Model,
3435
{
3536
label: core.string.UpdateObject,
37+
scope: 'space',
3638
description: core.string.UpdateObjectDescription
3739
},
3840
core.permission.UpdateObject
@@ -43,6 +45,7 @@ export function definePermissions (builder: Builder): void {
4345
core.space.Model,
4446
{
4547
label: core.string.DeleteObject,
48+
scope: 'space',
4649
description: core.string.DeleteObjectDescription
4750
},
4851
core.permission.DeleteObject
@@ -53,36 +56,20 @@ export function definePermissions (builder: Builder): void {
5356
core.space.Model,
5457
{
5558
label: core.string.ForbidDeleteObject,
59+
txClass: core.class.TxRemoveDoc,
60+
forbid: true,
61+
scope: 'space',
5662
description: core.string.ForbidDeleteObjectDescription
5763
},
5864
core.permission.ForbidDeleteObject
5965
)
6066

61-
builder.createDoc(
62-
core.class.Permission,
63-
core.space.Model,
64-
{
65-
label: core.string.UpdateObject,
66-
description: core.string.UpdateObjectDescription
67-
},
68-
core.permission.UpdateObject
69-
)
70-
71-
builder.createDoc(
72-
core.class.Permission,
73-
core.space.Model,
74-
{
75-
label: core.string.DeleteObject,
76-
description: core.string.DeleteObjectDescription
77-
},
78-
core.permission.DeleteObject
79-
)
80-
8167
builder.createDoc(
8268
core.class.Permission,
8369
core.space.Model,
8470
{
8571
label: core.string.UpdateSpace,
72+
scope: 'space',
8673
description: core.string.UpdateSpaceDescription
8774
},
8875
core.permission.UpdateSpace
@@ -93,18 +80,9 @@ export function definePermissions (builder: Builder): void {
9380
core.space.Model,
9481
{
9582
label: core.string.ArchiveSpace,
83+
scope: 'space',
9684
description: core.string.ArchiveSpaceDescription
9785
},
9886
core.permission.ArchiveSpace
9987
)
100-
101-
builder.createDoc(
102-
core.class.Permission,
103-
core.space.Model,
104-
{
105-
label: core.string.CreateProject,
106-
description: core.string.CreateProjectDescription
107-
},
108-
core.permission.CreateProject
109-
)
11088
}

models/core/src/security.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ import {
2929
type Space,
3030
type SpaceType,
3131
type SpaceTypeDescriptor,
32-
type TypedSpace
32+
type TypedSpace,
33+
type Doc,
34+
type Tx
3335
} from '@hcengineering/core'
3436
import {
3537
ArrOf,
@@ -155,6 +157,10 @@ export class TRole extends TAttachedDoc implements Role {
155157
@UX(core.string.Permission)
156158
export class TPermission extends TDoc implements Permission {
157159
label!: IntlString
160+
txClass?: Ref<Class<Tx>>
161+
forbid?: boolean
162+
objectClass?: Ref<Class<Doc<Space>>>
163+
scope?: 'space' | 'workspace'
158164
description?: IntlString
159165
icon?: Asset
160166
}

models/core/src/spaceType.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const roles = [
2424
{
2525
_id: core.role.Admin,
2626
name: 'Admin',
27-
permissions: [core.permission.UpdateObject, core.permission.DeleteObject, core.permission.CreateProject]
27+
permissions: [core.permission.UpdateObject, core.permission.DeleteObject]
2828
}
2929
]
3030

@@ -46,7 +46,7 @@ export function defineSpaceType (builder: Builder): void {
4646
description: core.string.SpacesDescription,
4747
icon: '' as Asset, // FIXME
4848
baseClass: core.class.Space,
49-
availablePermissions: [core.permission.UpdateObject, core.permission.DeleteObject, core.permission.CreateProject],
49+
availablePermissions: [core.permission.UpdateObject, core.permission.DeleteObject],
5050
system: true
5151
},
5252
core.descriptor.SpacesType

models/document/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import { type Asset, getEmbeddedLabel } from '@hcengineering/platform'
5353
import tags from '@hcengineering/tags'
5454
import time, { type ToDo, type Todoable } from '@hcengineering/time'
5555
import document from './plugin'
56+
import { definePermissions } from './permissions'
5657

5758
export { documentId } from '@hcengineering/document'
5859

@@ -560,6 +561,7 @@ export function createModel (builder: Builder): void {
560561
defineDocument(builder)
561562

562563
defineApplication(builder)
564+
definePermissions(builder)
563565

564566
builder.createDoc(core.class.DomainIndexConfiguration, core.space.Model, {
565567
domain: DOMAIN_DOCUMENT,

models/document/src/permissions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Builder } from '@hcengineering/model'
2+
import core from '@hcengineering/core'
3+
import document from '@hcengineering/document'
4+
5+
export function definePermissions (builder: Builder): void {
6+
builder.createDoc(
7+
core.class.Permission,
8+
core.space.Model,
9+
{
10+
label: document.string.ForbidCreateTeamspacePermission,
11+
scope: 'workspace',
12+
txClass: core.class.TxCreateDoc,
13+
objectClass: document.class.Teamspace,
14+
forbid: true,
15+
description: document.string.ForbidCreateTeamspacePermissionDescription
16+
},
17+
document.permission.ForbidCreateTeamspace
18+
)
19+
}

models/drive/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import workbench from '@hcengineering/model-workbench'
6363
import { getEmbeddedLabel } from '@hcengineering/platform'
6464

6565
import drive from './plugin'
66+
import { definePermissions } from './permissions'
6667

6768
export { driveId } from '@hcengineering/drive'
6869
export { driveOperation } from './migration'
@@ -790,4 +791,5 @@ export function createModel (builder: Builder): void {
790791
defineFile(builder)
791792
defineFileVersion(builder)
792793
defineApplication(builder)
794+
definePermissions(builder)
793795
}

models/drive/src/permissions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Builder } from '@hcengineering/model'
2+
import core from '@hcengineering/core'
3+
import drive from '@hcengineering/drive'
4+
5+
export function definePermissions (builder: Builder): void {
6+
builder.createDoc(
7+
core.class.Permission,
8+
core.space.Model,
9+
{
10+
label: drive.string.ForbidCreateDrivePermission,
11+
scope: 'workspace',
12+
txClass: core.class.TxCreateDoc,
13+
objectClass: drive.class.Drive,
14+
forbid: true,
15+
description: drive.string.ForbidCreateDrivePermissionDescription
16+
},
17+
drive.permission.ForbidCreateDrive
18+
)
19+
}

models/lead/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { type ViewOptionsModel } from '@hcengineering/view'
3232

3333
import lead from './plugin'
3434
import { defineSpaceType } from './spaceType'
35+
import { definePermissions } from './permissions'
3536
import { TCustomer, TFunnel, TLead } from './types'
3637

3738
export { leadId } from '@hcengineering/lead'
@@ -659,4 +660,5 @@ export function createModel (builder: Builder): void {
659660
})
660661

661662
defineSpaceType(builder)
663+
definePermissions(builder)
662664
}

models/lead/src/permissions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Builder } from '@hcengineering/model'
2+
import core from '@hcengineering/core'
3+
import lead from '@hcengineering/lead'
4+
5+
export function definePermissions (builder: Builder): void {
6+
builder.createDoc(
7+
core.class.Permission,
8+
core.space.Model,
9+
{
10+
label: lead.string.ForbidCreateFunnelPermission,
11+
scope: 'workspace',
12+
txClass: core.class.TxCreateDoc,
13+
objectClass: lead.class.Funnel,
14+
forbid: true,
15+
description: lead.string.ForbidCreateFunnelPermissionDescription
16+
},
17+
lead.permission.ForbidCreateFunnel
18+
)
19+
}

models/recruit/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { type KeyBinding, type ViewOptionModel, type ViewOptionsModel } from '@h
3838
import recruit from './plugin'
3939
import { createReviewModel, reviewTableConfig, reviewTableOptions } from './review'
4040
import { defineSpaceType } from './spaceType'
41+
import { definePermissions } from './permissions'
4142
import { TApplicant, TApplicantMatch, TCandidate, TOpinion, TReview, TVacancy, TVacancyList } from './types'
4243

4344
export { recruitId } from '@hcengineering/recruit'
@@ -1609,4 +1610,5 @@ export function createModel (builder: Builder): void {
16091610
)
16101611

16111612
defineSpaceType(builder)
1613+
definePermissions(builder)
16121614
}

models/recruit/src/permissions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Builder } from '@hcengineering/model'
2+
import core from '@hcengineering/core'
3+
import recruit from '@hcengineering/recruit'
4+
5+
export function definePermissions (builder: Builder): void {
6+
builder.createDoc(
7+
core.class.Permission,
8+
core.space.Model,
9+
{
10+
label: recruit.string.ForbidCreateVacancyPermission,
11+
scope: 'workspace',
12+
txClass: core.class.TxCreateDoc,
13+
objectClass: recruit.class.Vacancy,
14+
forbid: true,
15+
description: recruit.string.ForbidCreateVacancyPermissionDescription
16+
},
17+
recruit.permission.ForbidCreateVacancy
18+
)
19+
}

models/tracker/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
3232
import { createActions as defineActions } from './actions'
3333
import tracker from './plugin'
3434
import { definePresenters } from './presenters'
35+
import { definePermissions } from './permissions'
3536
import {
3637
DOMAIN_TRACKER,
3738
TClassicProjectTypeData,
@@ -708,6 +709,7 @@ export function createModel (builder: Builder): void {
708709
]
709710
})
710711

712+
definePermissions(builder)
711713
defineSpaceType(builder)
712714
}
713715

models/tracker/src/permissions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Builder } from '@hcengineering/model'
2+
import core from '@hcengineering/core'
3+
import tracker from '@hcengineering/tracker'
4+
5+
export function definePermissions (builder: Builder): void {
6+
builder.createDoc(
7+
core.class.Permission,
8+
core.space.Model,
9+
{
10+
label: tracker.string.ForbidCreateProjectPermission,
11+
txClass: core.class.TxCreateDoc,
12+
objectClass: tracker.class.Project,
13+
forbid: true,
14+
scope: 'workspace',
15+
description: tracker.string.ForbidCreateProjectPermissionDescription
16+
},
17+
tracker.permission.ForbidCreateProject
18+
)
19+
}

0 commit comments

Comments
 (0)