@things-factory/lite-menu 8.0.0-alpha.1 → 8.0.0-alpha.12

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": "8.0.0-alpha.1",
3
+ "version": "8.0.0-alpha.12",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -40,14 +40,14 @@
40
40
  "@operato/shell": "^8.0.0-alpha",
41
41
  "@operato/styles": "^8.0.0-alpha",
42
42
  "@operato/utils": "^8.0.0-alpha",
43
- "@things-factory/apptool-base": "^8.0.0-alpha.1",
44
- "@things-factory/auth-base": "^8.0.0-alpha.1",
45
- "@things-factory/board-service": "^8.0.0-alpha.1",
46
- "@things-factory/board-ui": "^8.0.0-alpha.1",
47
- "@things-factory/more-base": "^8.0.0-alpha.1",
48
- "@things-factory/personalization": "^8.0.0-alpha.1",
49
- "@things-factory/setting-base": "^8.0.0-alpha.1",
43
+ "@things-factory/apptool-base": "^8.0.0-alpha.8",
44
+ "@things-factory/auth-base": "^8.0.0-alpha.11",
45
+ "@things-factory/board-service": "^8.0.0-alpha.12",
46
+ "@things-factory/board-ui": "^8.0.0-alpha.11",
47
+ "@things-factory/more-base": "^8.0.0-alpha.8",
48
+ "@things-factory/personalization": "^8.0.0-alpha.11",
49
+ "@things-factory/setting-base": "^8.0.0-alpha.11",
50
50
  "@things-factory/utils": "^8.0.0-alpha.0"
51
51
  },
52
- "gitHead": "fda153ff6e86ef5ee7ace788739a100f3f413f08"
52
+ "gitHead": "69e7b90d7e1ddcaa75b75df60d40571db489bf4e"
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 }
@@ -70,8 +69,8 @@ export class LiteMenuPatch {
70
69
  @Field({ nullable: true })
71
70
  active?: boolean
72
71
 
73
- @Field(type => PrivilegeInput, { nullable: true })
74
- privilege?: PrivilegeInput
72
+ @Field(type => ObjectRef, { nullable: true })
73
+ role?: ObjectRef
75
74
 
76
75
  @Field(type => ScalarObject, { nullable: true })
77
76
  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
 
@@ -91,10 +91,18 @@ export class LiteMenu {
91
91
  @Field(type => Board, { nullable: true })
92
92
  board?: Board
93
93
 
94
+ // @deprecated
94
95
  @Column({ type: 'simple-json', nullable: true })
95
96
  @Field(type => PrivilegeObject, { nullable: true })
96
97
  privilege?: PrivilegeObject
97
98
 
99
+ @ManyToOne(type => Role)
100
+ @Field(type => Role, { nullable: true })
101
+ role?: Role
102
+
103
+ @RelationId((liteMenu: LiteMenu) => liteMenu.role)
104
+ roleId?: string
105
+
98
106
  @Column('simple-json', { nullable: true })
99
107
  @Field(type => ScalarObject, { nullable: true })
100
108
  labels?: any // { [lng: string]: string }