@things-factory/menu-base 7.1.24 → 7.1.33

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/menu-base",
3
- "version": "7.1.24",
3
+ "version": "7.1.33",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,7 +24,7 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/auth-base": "^7.1.24"
27
+ "@things-factory/auth-base": "^7.1.33"
28
28
  },
29
- "gitHead": "1838925b39cce3caa8e49a6dd2c15796af567695"
29
+ "gitHead": "da463a7d7851cf47c7d4b8136e7be6690b55969e"
30
30
  }
@@ -1,8 +1,8 @@
1
1
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { In, Repository, SelectQueryBuilder } from 'typeorm'
2
+ import { In, Repository, Brackets, SelectQueryBuilder } from 'typeorm'
3
3
 
4
4
  import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
5
- import { checkPermission, Role, User } from '@things-factory/auth-base'
5
+ import { Role, User } from '@things-factory/auth-base'
6
6
 
7
7
  import { MenuButton } from '../menu-button/menu-button'
8
8
  import { MenuColumn } from '../menu-column/menu-column'
@@ -81,26 +81,34 @@ export class MenuQuery {
81
81
 
82
82
  @Query(returns => MenuList, { description: 'To fetch my own Menus' })
83
83
  async myMenus(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<MenuList> {
84
- const { domain, user, unsafeIP, prohibitedPrivileges } = context.state
84
+ const { domain, user } = context.state
85
85
 
86
- const queryBuilder = getQueryBuilderFromListParams({
87
- domain,
88
- params,
89
- repository: await getRepository(Menu),
90
- searchables: ['name', 'description']
86
+ const me = await getRepository(User).findOne({
87
+ where: { id: user.id },
88
+ relations: ['roles']
91
89
  })
92
90
 
93
- const [items, total] = await queryBuilder.getManyAndCount()
94
-
95
- const filtered = []
91
+ const roles = me.roles
92
+ .filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
93
+ .map(role => role.id)
96
94
 
97
- for (let item of items) {
98
- if (await checkPermission(item.privilege, user, domain, unsafeIP, prohibitedPrivileges)) {
99
- filtered.push(item)
100
- }
101
- }
95
+ const [items, total] = await getQueryBuilderFromListParams({
96
+ repository: getRepository(Menu),
97
+ params,
98
+ domain,
99
+ alias: 'menu',
100
+ searchables: ['name', 'description']
101
+ })
102
+ .andWhere('menu.active = :active', { active: true })
103
+ .andWhere(
104
+ new Brackets(qb => {
105
+ qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
106
+ })
107
+ )
108
+ .setParameter('roles', roles)
109
+ .getManyAndCount()
102
110
 
103
- return { items: filtered, total: filtered.length }
111
+ return { items, total }
104
112
  }
105
113
 
106
114
  @Query(returns => MenuList, { description: 'To fetch Menus by role' })
@@ -174,26 +182,37 @@ export class MenuQuery {
174
182
  @Arg('permittedOnly', { defaultValue: false }) permittedOnly: boolean,
175
183
  @Ctx() context: ResolverContext
176
184
  ): Promise<Menu[]> {
177
- var menus =
178
- menu.children ||
179
- (await getRepository(Menu).findBy({
180
- parent: { id: menu.id }
181
- }))
182
-
183
185
  if (!permittedOnly) {
184
- return menus
186
+ return (
187
+ menu.children ||
188
+ (await getRepository(Menu).findBy({
189
+ parent: { id: menu.id }
190
+ }))
191
+ )
185
192
  }
186
193
 
187
- const { domain, user, unsafeIP, prohibitedPrivileges } = context.state
188
- const filtered = []
194
+ const { domain, user } = context.state
189
195
 
190
- for (let item of menus) {
191
- if (await checkPermission(item.privilege, user, domain, unsafeIP, prohibitedPrivileges)) {
192
- filtered.push(item)
193
- }
194
- }
196
+ const me = await getRepository(User).findOne({
197
+ where: { id: user.id },
198
+ relations: ['roles']
199
+ })
195
200
 
196
- return filtered
201
+ const roles = me.roles
202
+ .filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
203
+ .map(role => role.id)
204
+
205
+ return await getRepository(Menu)
206
+ .createQueryBuilder('menu')
207
+ .where('menu.parent = :parentId', { id: menu.id })
208
+ .andWhere('menu.active = :active', { active: true })
209
+ .andWhere(
210
+ new Brackets(qb => {
211
+ qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
212
+ })
213
+ )
214
+ .setParameter('roles', roles)
215
+ .getMany()
197
216
  }
198
217
 
199
218
  @FieldResolver(type => [MenuButton])
@@ -1,7 +1,6 @@
1
1
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
2
 
3
3
  import { ObjectRef } from '@things-factory/shell'
4
- import { PrivilegeInput } from '@things-factory/auth-base'
5
4
 
6
5
  import { Menu } from './menu'
7
6
 
@@ -32,7 +31,6 @@ export class NewMenu {
32
31
  @Field(type => Int, { nullable: true }) fixedColumns?: number
33
32
  @Field({ nullable: true }) iconPath?: string
34
33
  @Field({ nullable: true }) role?: ObjectRef
35
- @Field({ nullable: true }) privilege?: PrivilegeInput
36
34
  @Field({ nullable: true }) parent?: ObjectRef
37
35
  @Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
38
36
  @Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
@@ -66,7 +64,6 @@ export class MenuPatch {
66
64
  @Field(type => Int, { nullable: true }) fixedColumns?: number
67
65
  @Field({ nullable: true }) iconPath?: string
68
66
  @Field({ nullable: true }) role?: ObjectRef
69
- @Field({ nullable: true }) privilege?: PrivilegeInput
70
67
  @Field({ nullable: true }) parent?: ObjectRef
71
68
  @Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
72
69
  @Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
@@ -75,10 +75,6 @@ export class Menu {
75
75
  @Field(type => [Role], { nullable: true })
76
76
  roles?: Role[]
77
77
 
78
- @Column({ type: 'simple-json', nullable: true })
79
- @Field(type => PrivilegeObject, { nullable: true })
80
- privilege?: PrivilegeObject
81
-
82
78
  @Column('int', { nullable: true })
83
79
  @Field({ nullable: true })
84
80
  rank?: number