@tomei/sso 0.36.0 → 0.37.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/sso",
3
- "version": "0.36.0",
3
+ "version": "0.37.1",
4
4
  "description": "Tomei SSO Package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -1,6 +1,10 @@
1
1
  import { ClassError, ObjectBase } from '@tomei/general';
2
2
  import { UserGroupRepository } from './user-group.repository';
3
3
  import { IUserGroupAttr } from '../../interfaces/user-group.interface';
4
+ import { LoginUser, User } from '../../components/login-user';
5
+ import { Group } from '../../components/group';
6
+ import { ApplicationConfig } from '@tomei/config';
7
+ import { ActionEnum, Activity } from '@tomei/activity-history';
4
8
 
5
9
  export class UserGroup extends ObjectBase {
6
10
  ObjectType = 'UserGroup';
@@ -10,8 +14,8 @@ export class UserGroup extends ObjectBase {
10
14
  UserGroupId: number;
11
15
  UserId: number;
12
16
  GroupCode: string;
13
- InheritGroupPrivilegeYN: string;
14
- InheritGroupSystemAccessYN: string;
17
+ InheritGroupPrivilegeYN = 'Y';
18
+ InheritGroupSystemAccessYN = 'Y';
15
19
  Status: string;
16
20
  private _CreatedAt: Date;
17
21
  private _UpdatedAt: Date;
@@ -87,4 +91,208 @@ export class UserGroup extends ObjectBase {
87
91
  throw error;
88
92
  }
89
93
  }
94
+
95
+ async create(
96
+ loginUser: LoginUser,
97
+ dbTransaction: any,
98
+ group: Group,
99
+ user: User,
100
+ ) {
101
+ //This method will create a user group record.
102
+ try {
103
+ // Part 1: Privilege Checking
104
+ // Call loginUser.checkPrivileges() by passing:
105
+ // SystemCode: "<get_from_app_config>"
106
+ // PrivilegeCode: "USER_GROUP_CREATE"
107
+ const systemCode =
108
+ ApplicationConfig.getComponentConfigValue('system-code');
109
+ const isPrivileged = await loginUser.checkPrivileges(
110
+ systemCode,
111
+ 'USER_GROUP_CREATE',
112
+ );
113
+
114
+ // If user does not have privilege to update user, throw a ClassError
115
+ if (!isPrivileged) {
116
+ throw new ClassError(
117
+ 'UserGroup',
118
+ 'UserGroupErrMsg0X',
119
+ 'User does not have privilege to create user group.',
120
+ );
121
+ }
122
+
123
+ // Part 2: Validation
124
+ // Make sure group.GroupCode exists, if not throw new ClassError by passing:
125
+ // Classname: "UserGroup"
126
+ // MethodName: "create"
127
+ // MessageCode: "UserGroupErrMsg02"
128
+ // Message: "GroupCode is required."
129
+ if (!group.GroupCode) {
130
+ throw new ClassError(
131
+ 'UserGroup',
132
+ 'UserGroupErrMsg02',
133
+ 'GroupCode is required.',
134
+ );
135
+ }
136
+
137
+ // Make sure user.UserId exists, if not throw new ClassError by passing:
138
+ // Classname: "UserGroup"
139
+ // MethodName: "create"
140
+ // MessageCode: "UserGroupErrMsg03"
141
+ // Message: "UserId is required."
142
+ if (!user.UserId) {
143
+ throw new ClassError(
144
+ 'UserGroup',
145
+ 'UserGroupErrMsg03',
146
+ 'UserId is required.',
147
+ );
148
+ }
149
+
150
+ // Call UserGroup.findOne static method by passing:
151
+ // loginUser
152
+ // dbTransaction
153
+ // GroupCode: group.GroupCode
154
+ // UserId: user.UserId
155
+ const userGroup = await UserGroup.findOne(
156
+ dbTransaction,
157
+ loginUser,
158
+ group.GroupCode,
159
+ user.UserId,
160
+ );
161
+
162
+ if (userGroup) {
163
+ return userGroup;
164
+ }
165
+
166
+ // Part 3: Create
167
+ // Set below attributes:
168
+ // UserGroupId: this.createId()
169
+ // UserId: Params.user.UserId
170
+ // GroupCode: Params.group.GroupCode
171
+ // Status: "Active"
172
+ // CreatedById: loginUser.ObjectId
173
+ // CreatedAt: current timestamp
174
+ // UpdatedById: loginUser.ObjectId
175
+ // UpdatedAt: current timestamp
176
+ this.UserId = user.UserId;
177
+ this.GroupCode = group.GroupCode;
178
+ this.Status = 'Active';
179
+ this._CreatedById = loginUser.UserId;
180
+ this._CreatedAt = new Date();
181
+ this._UpdatedById = loginUser.UserId;
182
+ this._UpdatedAt = new Date();
183
+
184
+ // Call UserGroup._Repo create() method by passing:
185
+ // populate this instance attributes
186
+ // dbTransaction
187
+
188
+ const userData = await UserGroup._Repository.create(
189
+ {
190
+ UserId: this.UserId,
191
+ GroupCode: this.GroupCode,
192
+ Status: this.Status,
193
+ CreatedById: this._CreatedById,
194
+ CreatedAt: this._CreatedAt,
195
+ UpdatedById: this._UpdatedById,
196
+ UpdatedAt: this._UpdatedAt,
197
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
198
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
199
+ },
200
+ {
201
+ transaction: dbTransaction,
202
+ },
203
+ );
204
+
205
+ this.UserGroupId = userData.UserGroupId;
206
+
207
+ // Part 4: Record Create UserGroup Activity
208
+ // Initialise EntityValueAfter variable and set to this instance
209
+ const EntityValueAfter = {
210
+ UserGroupId: this.UserGroupId,
211
+ UserId: this.UserId,
212
+ GroupCode: this.GroupCode,
213
+ Status: this.Status,
214
+ CreatedById: this._CreatedById,
215
+ CreatedAt: this._CreatedAt,
216
+ UpdatedById: this._UpdatedById,
217
+ UpdatedAt: this._UpdatedAt,
218
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
219
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
220
+ };
221
+ // Instantiate new activity from Activity class, call createId() method, then set:
222
+ // Action: ActionEnum.Create
223
+ // Description: Assign user to group.
224
+ // EntityType: "UserGroup"
225
+ // EntityId: this.UserGroupId
226
+ // EntityValueBefore: <stringify of empty object>
227
+ // EntityValueAfter: EntityValueAfter
228
+ const activity = new Activity();
229
+ activity.Action = ActionEnum.ADD;
230
+ activity.Description = 'Assign user to group.';
231
+ activity.EntityType = 'UserGroup';
232
+ activity.EntityId = this.UserGroupId.toString();
233
+ activity.EntityValueBefore = JSON.stringify({});
234
+ activity.EntityValueAfter = JSON.stringify(EntityValueAfter);
235
+ // Call new activity create method by passing:
236
+ // dbTransaction
237
+ // userId: loginUser.ObjectId
238
+ // return this instance
239
+ await activity.create(loginUser.ObjectId, dbTransaction);
240
+
241
+ return this;
242
+ } catch (error) {
243
+ throw error;
244
+ }
245
+ }
246
+
247
+ public static async findOne(
248
+ dbTransaction: any,
249
+ loginUser: LoginUser,
250
+ GroupCode: string,
251
+ UserId: number,
252
+ ): Promise<UserGroup> {
253
+ try {
254
+ // Part 1: Privilege Checking
255
+ // Call loginUser.checkPrivileges() by passing:
256
+ // SystemCode: "<get_from_app_config>"
257
+ // PrivilegeCode: "USER_GROUP_VIEW"
258
+ const systemCode =
259
+ ApplicationConfig.getComponentConfigValue('system-code');
260
+ const isPrivileged = await loginUser.checkPrivileges(
261
+ systemCode,
262
+ 'USER_GROUP_VIEW',
263
+ );
264
+
265
+ // If user does not have privilege to view user group, throw a ClassError
266
+ if (!isPrivileged) {
267
+ throw new ClassError(
268
+ 'UserGroup',
269
+ 'UserGroupErrMsg0X',
270
+ 'User does not have privilege to view user group.',
271
+ );
272
+ }
273
+
274
+ // Part 2: Retrieve Record
275
+ // Call UserGroup._Repo findOne method by passing:
276
+ // where:
277
+ // [Op.AND]:
278
+ // UserId: Params.UserId
279
+ // GroupCode: Params.GroupCode
280
+ // dbTransaction
281
+ const userGroupAttr = await UserGroup._Repository.findOne({
282
+ where: {
283
+ UserId,
284
+ GroupCode,
285
+ },
286
+ transaction: dbTransaction,
287
+ });
288
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
289
+ if (userGroupAttr) {
290
+ return new UserGroup(userGroupAttr.get({ plain: true }));
291
+ }
292
+ // If record not exists, return null.
293
+ return null;
294
+ } catch (error) {
295
+ throw error;
296
+ }
297
+ }
90
298
  }