@things-factory/lite-menu 7.1.31 → 7.1.34

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": "7.1.31",
3
+ "version": "7.1.34",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -41,13 +41,13 @@
41
41
  "@operato/styles": "^7.0.0",
42
42
  "@operato/utils": "^7.0.0",
43
43
  "@things-factory/apptool-base": "^7.1.24",
44
- "@things-factory/auth-base": "^7.1.24",
45
- "@things-factory/board-service": "^7.1.29",
46
- "@things-factory/board-ui": "^7.1.31",
44
+ "@things-factory/auth-base": "^7.1.33",
45
+ "@things-factory/board-service": "^7.1.34",
46
+ "@things-factory/board-ui": "^7.1.33",
47
47
  "@things-factory/more-base": "^7.1.24",
48
- "@things-factory/personalization": "^7.1.24",
49
- "@things-factory/setting-base": "^7.1.24",
48
+ "@things-factory/personalization": "^7.1.33",
49
+ "@things-factory/setting-base": "^7.1.33",
50
50
  "@things-factory/utils": "^7.1.24"
51
51
  },
52
- "gitHead": "49a1f306f2f49780b6a25a9f8447969fe00d5ba3"
52
+ "gitHead": "22830c9e51c9fffb3c95d1d1f8cacc7706f7d2d1"
53
53
  }
@@ -1,8 +1,8 @@
1
- import { In } from 'typeorm'
1
+ import { In, Brackets } from 'typeorm'
2
2
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
3
3
 
4
4
  import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
5
- import { User, checkPermission } from '@things-factory/auth-base'
5
+ import { User, Role } from '@things-factory/auth-base'
6
6
  import { Board } from '@things-factory/board-service'
7
7
 
8
8
  import { LiteMenu } from './lite-menu'
@@ -43,25 +43,34 @@ export class LiteMenuQuery {
43
43
  @Args(type => ListParam) params: ListParam,
44
44
  @Ctx() context: ResolverContext
45
45
  ): Promise<LiteMenuList> {
46
- const { domain, user, unsafeIP, prohibitedPrivileges } = context.state
46
+ const { domain, user } = context.state
47
47
 
48
- const queryBuilder = getQueryBuilderFromListParams({
48
+ const me = await getRepository(User).findOne({
49
+ where: { id: user.id },
50
+ relations: ['roles']
51
+ })
52
+
53
+ const roles = me.roles
54
+ .filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
55
+ .map(role => role.id)
56
+
57
+ const [items, total] = await getQueryBuilderFromListParams({
49
58
  repository: getRepository(LiteMenu),
50
59
  params,
51
60
  domain,
61
+ alias: 'menu',
52
62
  searchables: ['name', 'description']
53
63
  })
54
- var [items, total] = await queryBuilder.getManyAndCount()
55
-
56
- const filtered = []
64
+ .andWhere('menu.active = :active', { active: true })
65
+ .andWhere(
66
+ new Brackets(qb => {
67
+ qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
68
+ })
69
+ )
70
+ .setParameter('roles', roles)
71
+ .getManyAndCount()
57
72
 
58
- for (let item of items) {
59
- if (await checkPermission(item.privilege, user, domain, unsafeIP, prohibitedPrivileges)) {
60
- filtered.push(item)
61
- }
62
- }
63
-
64
- return { items: filtered, total: filtered.length }
73
+ return { items, total }
65
74
  }
66
75
 
67
76
  @FieldResolver(type => String)
@@ -79,18 +88,23 @@ export class LiteMenuQuery {
79
88
  }
80
89
  }
81
90
 
91
+ @FieldResolver(type => Role)
92
+ async role(@Root() liteMenu: LiteMenu) {
93
+ return liteMenu.roleId && (await getRepository(Role).findOneBy({ id: liteMenu.roleId }))
94
+ }
95
+
82
96
  @FieldResolver(type => Domain)
83
97
  async domain(@Root() liteMenu: LiteMenu) {
84
- return await getRepository(Domain).findOneBy({ id: liteMenu.domainId })
98
+ return liteMenu.domainId && (await getRepository(Domain).findOneBy({ id: liteMenu.domainId }))
85
99
  }
86
100
 
87
101
  @FieldResolver(type => User)
88
102
  async updater(@Root() liteMenu: LiteMenu): Promise<User> {
89
- return await getRepository(User).findOneBy({ id: liteMenu.updaterId })
103
+ return liteMenu.updaterId && (await getRepository(User).findOneBy({ id: liteMenu.updaterId }))
90
104
  }
91
105
 
92
106
  @FieldResolver(type => User)
93
107
  async creator(@Root() liteMenu: LiteMenu): Promise<User> {
94
- return await getRepository(User).findOneBy({ id: liteMenu.creatorId })
108
+ return liteMenu.creatorId && (await getRepository(User).findOneBy({ id: liteMenu.creatorId }))
95
109
  }
96
110
  }
@@ -1,7 +1,6 @@
1
1
  import { Field, InputType, Int, ObjectType } from 'type-graphql'
2
2
 
3
- import { ScalarObject } from '@things-factory/shell'
4
- import { Privilege, PrivilegeInput } from '@things-factory/auth-base'
3
+ import { ScalarObject, ObjectRef } from '@things-factory/shell'
5
4
 
6
5
  import { LiteMenu } from './lite-menu'
7
6
 
@@ -34,8 +33,8 @@ export class NewLiteMenu {
34
33
  @Field({ nullable: true })
35
34
  active?: boolean
36
35
 
37
- @Field(type => PrivilegeInput, { nullable: true })
38
- privilege?: PrivilegeInput
36
+ @Field(type => ObjectRef, { nullable: true })
37
+ role?: ObjectRef
39
38
 
40
39
  @Field(type => ScalarObject, { nullable: true })
41
40
  labels?: any // { [lng: string]: string }
@@ -73,8 +72,8 @@ export class LiteMenuPatch {
73
72
  @Field({ nullable: true })
74
73
  active?: boolean
75
74
 
76
- @Field(type => PrivilegeInput, { nullable: true })
77
- privilege?: PrivilegeInput
75
+ @Field(type => ObjectRef, { nullable: true })
76
+ role?: ObjectRef
78
77
 
79
78
  @Field(type => ScalarObject, { nullable: true })
80
79
  labels?: any // { [lng: string]: string }
@@ -10,7 +10,7 @@ import {
10
10
  UpdateDateColumn
11
11
  } from 'typeorm'
12
12
 
13
- import { PrivilegeObject, User } from '@things-factory/auth-base'
13
+ import { PrivilegeObject, User, Role } from '@things-factory/auth-base'
14
14
  import { Board } from '@things-factory/board-service'
15
15
  import { Domain, ScalarObject } from '@things-factory/shell'
16
16
  import { config } from '@things-factory/env'
@@ -95,9 +95,12 @@ export class LiteMenu {
95
95
  @Field(type => Board, { nullable: true })
96
96
  board?: Board
97
97
 
98
- @Column({ type: 'simple-json', nullable: true })
99
- @Field(type => PrivilegeObject, { nullable: true })
100
- privilege?: PrivilegeObject
98
+ @ManyToOne(type => Role)
99
+ @Field(type => Role, { nullable: true })
100
+ role?: Role
101
+
102
+ @RelationId((liteMenu: LiteMenu) => liteMenu.role)
103
+ roleId?: string
101
104
 
102
105
  @Column('simple-json', { nullable: true })
103
106
  @Field(type => ScalarObject, { nullable: true, description: 'Settings for multilingual titles' })