@things-factory/lite-menu 6.2.24 → 6.2.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/lite-menu",
3
- "version": "6.2.24",
3
+ "version": "6.2.25",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -35,12 +35,12 @@
35
35
  "@operato/styles": "^1.0.0",
36
36
  "@operato/utils": "^1.0.1",
37
37
  "@things-factory/apptool-base": "^6.2.24",
38
- "@things-factory/auth-base": "^6.2.24",
39
- "@things-factory/board-service": "^6.2.24",
40
- "@things-factory/board-ui": "^6.2.24",
38
+ "@things-factory/auth-base": "^6.2.25",
39
+ "@things-factory/board-service": "^6.2.25",
40
+ "@things-factory/board-ui": "^6.2.25",
41
41
  "@things-factory/more-base": "^6.2.24",
42
- "@things-factory/setting-base": "^6.2.24",
42
+ "@things-factory/setting-base": "^6.2.25",
43
43
  "@things-factory/utils": "^6.2.0"
44
44
  },
45
- "gitHead": "f407983563cca529ba87ea8febb5be751ad3229e"
45
+ "gitHead": "9e6b8dadc24f446e55e5542c1df6376ada1f2ffc"
46
46
  }
@@ -1,13 +1,27 @@
1
1
  import { In } from 'typeorm'
2
2
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
3
3
 
4
- import { User } from '@things-factory/auth-base'
5
- import { Board } from '@things-factory/board-service'
6
4
  import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
5
+ import { PrivilegeObject, User } from '@things-factory/auth-base'
6
+ import { Board } from '@things-factory/board-service'
7
7
 
8
8
  import { LiteMenu } from './lite-menu'
9
9
  import { LiteMenuList } from './lite-menu-type'
10
10
 
11
+ async function checkPermission(privilegeObject: PrivilegeObject, user: User, domain: Domain): Promise<boolean> {
12
+ if (!privilegeObject || !privilegeObject.privilege || !privilegeObject.category) {
13
+ return true
14
+ }
15
+
16
+ const { owner: domainOwnerGranted, super: superUserGranted, category, privilege } = privilegeObject
17
+
18
+ return (
19
+ (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||
20
+ (superUserGranted && (await process.superUserGranted(domain, user))) ||
21
+ (category && privilege && (await User.hasPrivilege(privilege, category, domain, user)))
22
+ )
23
+ }
24
+
11
25
  @Resolver(LiteMenu)
12
26
  export class LiteMenuQuery {
13
27
  @Query(returns => LiteMenu, { description: 'To fetch a LiteMenu' })
@@ -38,6 +52,29 @@ export class LiteMenuQuery {
38
52
  return { items, total }
39
53
  }
40
54
 
55
+ @Query(returns => LiteMenuList, { description: 'To fetch my own LiteMenus' })
56
+ async myLiteMenus(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<LiteMenuList> {
57
+ const { domain, user } = context.state
58
+
59
+ const queryBuilder = getQueryBuilderFromListParams({
60
+ repository: getRepository(LiteMenu),
61
+ params,
62
+ domain,
63
+ searchables: ['name', 'description']
64
+ })
65
+ var [items, total] = await queryBuilder.getManyAndCount()
66
+
67
+ const filtered = []
68
+
69
+ for (let item of items) {
70
+ if (await checkPermission(item.privilege, user, domain)) {
71
+ filtered.push(item)
72
+ }
73
+ }
74
+
75
+ return { items: filtered, total: filtered.length }
76
+ }
77
+
41
78
  @FieldResolver(type => Board)
42
79
  async board(@Root() liteMenu: LiteMenu) {
43
80
  if ((liteMenu.type === 'board' || liteMenu.type === 'interactive-board') && liteMenu.value) {
@@ -1,4 +1,5 @@
1
1
  import { Field, InputType, Int, ObjectType } from 'type-graphql'
2
+ import { PrivilegeInput } from '@things-factory/auth-base'
2
3
 
3
4
  import { LiteMenu } from './lite-menu'
4
5
 
@@ -30,6 +31,9 @@ export class NewLiteMenu {
30
31
 
31
32
  @Field({ nullable: true })
32
33
  active?: boolean
34
+
35
+ @Field({ nullable: true })
36
+ privilege?: PrivilegeInput
33
37
  }
34
38
 
35
39
  @InputType()
@@ -60,6 +64,9 @@ export class LiteMenuPatch {
60
64
 
61
65
  @Field({ nullable: true })
62
66
  active?: boolean
67
+
68
+ @Field({ nullable: true })
69
+ privilege?: PrivilegeInput
63
70
  }
64
71
 
65
72
  @ObjectType()
@@ -10,7 +10,7 @@ import {
10
10
  UpdateDateColumn
11
11
  } from 'typeorm'
12
12
 
13
- import { User } from '@things-factory/auth-base'
13
+ import { PrivilegeObject, User } from '@things-factory/auth-base'
14
14
  import { Board } from '@things-factory/board-service'
15
15
  import { Domain } from '@things-factory/shell'
16
16
 
@@ -89,6 +89,10 @@ export class LiteMenu {
89
89
  @Field(type => Board, { nullable: true })
90
90
  board?: Board
91
91
 
92
+ @Column({ type: 'simple-json', nullable: true })
93
+ @Field(type => PrivilegeObject, { nullable: true })
94
+ privilege?: PrivilegeObject
95
+
92
96
  @CreateDateColumn()
93
97
  @Field({ nullable: true })
94
98
  createdAt?: Date