@tomei/sso 0.30.1 → 0.31.1
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/dist/src/components/group/group.d.ts +9 -1
- package/dist/src/components/group/group.js +113 -0
- package/dist/src/components/group/group.js.map +1 -1
- package/dist/src/components/index.d.ts +2 -0
- package/dist/src/components/index.js +2 -0
- package/dist/src/components/index.js.map +1 -1
- package/dist/src/components/system-privilege/index.d.ts +3 -0
- package/dist/src/components/system-privilege/index.js +8 -0
- package/dist/src/components/system-privilege/index.js.map +1 -0
- package/dist/src/interfaces/group-search-attr.interface.d.ts +7 -0
- package/dist/src/interfaces/group-search-attr.interface.js +3 -0
- package/dist/src/interfaces/group-search-attr.interface.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/interfaces/index.js +1 -0
- package/dist/src/interfaces/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/group/group.ts +204 -2
- package/src/components/index.ts +2 -0
- package/src/components/system-privilege/index.ts +4 -0
- package/src/interfaces/group-search-attr.interface.ts +8 -0
- package/src/interfaces/index.ts +1 -0
package/package.json
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
import { ClassError,
|
1
|
+
import { ClassError, ObjectBase } from '@tomei/general';
|
2
2
|
import { GroupRepository } from './group.repository';
|
3
3
|
import { IGroupAttr } from '../../interfaces/group.interface';
|
4
4
|
import { GroupTypeEnum } from 'enum';
|
5
|
+
import { LoginUser } from '../login-user/login-user';
|
6
|
+
import { IGroupSearchAttr } from '../../interfaces/group-search-attr.interface';
|
7
|
+
import { ApplicationConfig } from '@tomei/config';
|
8
|
+
import { Op } from 'sequelize';
|
9
|
+
import { ActionEnum, Activity } from '@tomei/activity-history';
|
5
10
|
|
6
11
|
export class Group extends ObjectBase {
|
7
12
|
ObjectId: string;
|
@@ -9,7 +14,6 @@ export class Group extends ObjectBase {
|
|
9
14
|
TableName: 'sso_Group';
|
10
15
|
ObjectType = 'Group';
|
11
16
|
|
12
|
-
GroupCode: string;
|
13
17
|
Name: string;
|
14
18
|
Description: string;
|
15
19
|
Type: GroupTypeEnum;
|
@@ -23,6 +27,14 @@ export class Group extends ObjectBase {
|
|
23
27
|
private _UpdatedAt: Date;
|
24
28
|
private static _Repo = new GroupRepository();
|
25
29
|
|
30
|
+
get GroupCode(): string {
|
31
|
+
return this.ObjectId;
|
32
|
+
}
|
33
|
+
|
34
|
+
set GroupCode(value: string) {
|
35
|
+
this.ObjectId = value;
|
36
|
+
}
|
37
|
+
|
26
38
|
get CreatedById(): number {
|
27
39
|
return this._CreatedById;
|
28
40
|
}
|
@@ -78,4 +90,194 @@ export class Group extends ObjectBase {
|
|
78
90
|
);
|
79
91
|
}
|
80
92
|
}
|
93
|
+
|
94
|
+
public static async findAll(
|
95
|
+
page: number,
|
96
|
+
row: number,
|
97
|
+
dbTransaction: any,
|
98
|
+
loginUser: LoginUser,
|
99
|
+
search?: IGroupSearchAttr,
|
100
|
+
) {
|
101
|
+
//This method will list all group based on the query params.
|
102
|
+
//Part 1: Privilege Checking
|
103
|
+
const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
|
104
|
+
const isPrivileged = await loginUser.checkPrivileges(
|
105
|
+
systemCode,
|
106
|
+
'GROUP_LIST',
|
107
|
+
);
|
108
|
+
|
109
|
+
if (!isPrivileged) {
|
110
|
+
throw new ClassError(
|
111
|
+
'Group',
|
112
|
+
'GroupErrMsg04',
|
113
|
+
'User is not privileged to list group',
|
114
|
+
);
|
115
|
+
}
|
116
|
+
|
117
|
+
//Part 2: Retrieve listing
|
118
|
+
const queryObj: any = {};
|
119
|
+
|
120
|
+
let options: any = {
|
121
|
+
transaction: dbTransaction,
|
122
|
+
};
|
123
|
+
|
124
|
+
if (page && row) {
|
125
|
+
options = {
|
126
|
+
...options,
|
127
|
+
limit: row,
|
128
|
+
offset: row * (page - 1),
|
129
|
+
order: [['CreatedAt', 'DESC']],
|
130
|
+
};
|
131
|
+
}
|
132
|
+
|
133
|
+
if (search) {
|
134
|
+
Object.entries(search).forEach(([key, value]) => {
|
135
|
+
queryObj[key] = {
|
136
|
+
[Op.substring]: value,
|
137
|
+
};
|
138
|
+
});
|
139
|
+
|
140
|
+
options = {
|
141
|
+
...options,
|
142
|
+
where: queryObj,
|
143
|
+
};
|
144
|
+
return await Group._Repo.findAllWithPagination(options);
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
public static async create(
|
149
|
+
loginUser: LoginUser,
|
150
|
+
dbTransaction: any,
|
151
|
+
group: Group,
|
152
|
+
) {
|
153
|
+
try {
|
154
|
+
//Part 1: Privilege Checking
|
155
|
+
const systemCode =
|
156
|
+
ApplicationConfig.getComponentConfigValue('system-code');
|
157
|
+
const isPrivileged = await loginUser.checkPrivileges(
|
158
|
+
systemCode,
|
159
|
+
'GROUP_CREATE',
|
160
|
+
);
|
161
|
+
if (!isPrivileged) {
|
162
|
+
throw new Error('You do not have permission to create group');
|
163
|
+
}
|
164
|
+
|
165
|
+
//Part 2: Validation
|
166
|
+
if (!group.GroupCode) {
|
167
|
+
throw new ClassError(
|
168
|
+
'Group',
|
169
|
+
'GroupErrMsg02',
|
170
|
+
'Group Code is required',
|
171
|
+
);
|
172
|
+
}
|
173
|
+
|
174
|
+
if (!group.Name) {
|
175
|
+
throw new ClassError(
|
176
|
+
'Group',
|
177
|
+
'GroupErrMsg02',
|
178
|
+
'Group Name is required',
|
179
|
+
);
|
180
|
+
}
|
181
|
+
|
182
|
+
if (!group.Type) {
|
183
|
+
throw new ClassError(
|
184
|
+
'Group',
|
185
|
+
'GroupErrMsg02',
|
186
|
+
'Group Type is required',
|
187
|
+
);
|
188
|
+
}
|
189
|
+
|
190
|
+
//Check if group code is unique
|
191
|
+
const existingGroupCode = await Group._Repo.findByPk(group.GroupCode, {
|
192
|
+
transaction: dbTransaction,
|
193
|
+
});
|
194
|
+
|
195
|
+
if (existingGroupCode) {
|
196
|
+
throw new ClassError(
|
197
|
+
'Group',
|
198
|
+
'GroupErrMsg03',
|
199
|
+
'Duplicate GroupCode found.',
|
200
|
+
);
|
201
|
+
}
|
202
|
+
|
203
|
+
//Validate parent group code if passed. Call Group._Repo.findByPk
|
204
|
+
if (group.ParentGroupCode) {
|
205
|
+
const parentGroup = await Group._Repo.findByPk(group.ParentGroupCode, {
|
206
|
+
transaction: dbTransaction,
|
207
|
+
});
|
208
|
+
|
209
|
+
if (!parentGroup) {
|
210
|
+
throw new ClassError(
|
211
|
+
'Group',
|
212
|
+
'GroupErrMsg04',
|
213
|
+
'ParentGroupCode is not found.',
|
214
|
+
);
|
215
|
+
}
|
216
|
+
|
217
|
+
//If Params.group.GroupCode = Params.group?.ParentGroupCode, throw new ClassError
|
218
|
+
if (group.GroupCode === group.ParentGroupCode) {
|
219
|
+
throw new ClassError(
|
220
|
+
'Group',
|
221
|
+
'GroupErrMsg05',
|
222
|
+
'GroupCode and ParentGroupCode cannot be the same.',
|
223
|
+
);
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
//Part 3: Create Group
|
228
|
+
//Initialise new Group instance and populate
|
229
|
+
const newGroup = new Group(group);
|
230
|
+
newGroup.ObjectId = group.GroupCode;
|
231
|
+
newGroup.Name = group.Name;
|
232
|
+
newGroup.Type = group.Type;
|
233
|
+
newGroup.Description = group.Description;
|
234
|
+
newGroup.ParentGroupCode = group.ParentGroupCode;
|
235
|
+
newGroup.InheritParentPrivilegeYN = group.InheritParentPrivilegeYN;
|
236
|
+
newGroup.InheritParentSystemAccessYN = group.InheritParentSystemAccessYN;
|
237
|
+
newGroup.Status = 'Active';
|
238
|
+
newGroup._CreatedById = loginUser.UserId;
|
239
|
+
newGroup._UpdatedById = loginUser.UserId;
|
240
|
+
|
241
|
+
//Call Group._Repo create method
|
242
|
+
const entityGroupAfter = {
|
243
|
+
GroupCode: newGroup.ObjectId,
|
244
|
+
Name: newGroup.Name,
|
245
|
+
Type: newGroup.Type,
|
246
|
+
Description: newGroup.Description,
|
247
|
+
ParentGroupCode: newGroup.ParentGroupCode,
|
248
|
+
InheritParentPrivilegeYN: newGroup.InheritParentPrivilegeYN,
|
249
|
+
InheritParentSystemAccessYN: newGroup.InheritParentSystemAccessYN,
|
250
|
+
Status: newGroup.Status,
|
251
|
+
CreatedById: newGroup._CreatedById,
|
252
|
+
UpdatedById: newGroup._UpdatedById,
|
253
|
+
CreatedAt: newGroup._CreatedAt,
|
254
|
+
UpdatedAt: newGroup._UpdatedAt,
|
255
|
+
};
|
256
|
+
|
257
|
+
await Group._Repo.create(entityGroupAfter, {
|
258
|
+
transaction: dbTransaction,
|
259
|
+
});
|
260
|
+
|
261
|
+
//Part 4: Record Create Group Activity and return newGroup
|
262
|
+
|
263
|
+
const entityValueBefore = {};
|
264
|
+
|
265
|
+
//Instantiate new activity
|
266
|
+
const activity = new Activity();
|
267
|
+
activity.ActivityId = activity.createId();
|
268
|
+
activity.Action = ActionEnum.ADD;
|
269
|
+
activity.Description = 'Create Group';
|
270
|
+
activity.EntityType = 'Group';
|
271
|
+
activity.EntityId = newGroup.ObjectId;
|
272
|
+
activity.EntityValueBefore = JSON.stringify(entityValueBefore);
|
273
|
+
activity.EntityValueAfter = JSON.stringify(entityGroupAfter);
|
274
|
+
|
275
|
+
//Call Activity.create method
|
276
|
+
await activity.create(loginUser.ObjectId, dbTransaction);
|
277
|
+
|
278
|
+
return newGroup;
|
279
|
+
} catch (error) {
|
280
|
+
throw error;
|
281
|
+
}
|
282
|
+
}
|
81
283
|
}
|
package/src/components/index.ts
CHANGED
package/src/interfaces/index.ts
CHANGED