Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
119 ghuddy 1
<%
2
'=============================================================
3
'//
4
'//						Access Control
5
'//
6
'// version: 		5.0
7
'//	last modified: 	15-June-2005 14:04 by Sasha Vukovic
8
'=============================================================
9
%>
10
<%
11
'--------------- Global Constants ----------------
12
Const enumSESSION_TIMEOUT = 200		' Minutes
13
Const enumSESSION_LAST_REQUEST = "AM_SESSION_LAST_REQUEST"
14
Const enumLOGIN_TOKEN_SESSION = "AM_LOGIN_TOKEN"
15
Const enumUSER_ID_SESSION = "AM_USER_ID"
16
Const enumUSER_DETAILS_SESSION = "AM_USER_DETAILS"
17
Const enumUSER_APPLICATIONS_SESSION = "AM_USER_APPLICATIONS"
18
Const enumUSER_STATIC_PERMISSIONS = "AM_USER_STATIC_PERMISSIONS"
19
Const enumUSER_DATA_PERMISSIONS = "AM_USER_DATA_PERMISSIONS"
20
Const enumUSER_TEMP_VARIABLE = "AM_USER_TEMP_VARIABLE"
21
Const enumACCESS_MANAGER_EVENT_LOGON_SUCCESS  = 1
22
Const enumACCESS_MANAGER_EVENT_LOGON_FAIL  	  = -1
23
Const enumACCESS_MANAGER_EVENT_LOGOFF 		  = 0
24
Const enumACCESS_MANAGER_EVENT_SESSION_EXPIRE = 2
25
'-------------------------------------------------
26
 
27
Class AccessControl
28
	Private moOraSession
29
	Private moOraDatabase
30
	Private mobjStaticControl
31
	Private mobjRowPermissions
32
	Private mobjTablePermissions
33
	Private sSEPARATOR
34
	Private mbIsApplicationRunning
35
 
36
	Public Property Let objOraDatabase ( ByRef oOraDatabase )
37
		Set moOraDatabase = oOraDatabase
38
	End Property
39
 
40
	Public Property Let objOraSession ( ByRef oOraSession )
41
		Set moOraSession = oOraSession
42
	End Property
43
 
44
	Public Property Get UserLogedIn ()
45
		UserLogedIn = FALSE
46
 
47
		' Check for Session Token
48
		If (Session(enumLOGIN_TOKEN_SESSION) <> "") AND NOT IsNull(Session(enumLOGIN_TOKEN_SESSION)) Then  
49
			UserLogedIn = TRUE
50
		End If
51
 
52
	End Property
53
 
54
	Public Property Get UserId ()
55
		UserId = Session(enumUSER_ID_SESSION)
56
	End Property
57
 
58
	Public Property Get UserName ()
59
		UserName = Extract( "user_name", Session(enumUSER_DETAILS_SESSION) )
60
	End Property
61
 
62
	Public Property Get FullName ()
63
		FullName = Extract( "full_name", Session(enumUSER_DETAILS_SESSION) )
64
	End Property
65
 
66
	Public Property Get UserEmail ()
67
		UserEmail = Extract( "user_email", Session(enumUSER_DETAILS_SESSION) )
68
	End Property
69
 
70
	Public Property Get LastVisit ()
71
		LastVisit = Extract( "last_visit", Session(enumUSER_DETAILS_SESSION) )
72
	End Property
73
 
74
	Public Property Get Domain ()
75
		Domain = Extract( "domain", Session(enumUSER_DETAILS_SESSION) )
76
	End Property
77
 
78
	Public Property Get IsApplicationRunning()
79
		If IsNull(mbIsApplicationRunning) Then
80
			Call GetApplicationRunningLevel ()
81
 
82
		End If
83
 
84
		IsApplicationRunning = mbIsApplicationRunning
85
	End Property
86
 
87
	'-----------------------------------------------------------------------------------------------------------------
88
	Public Function UserApplication ( nAppId )
89
		UserApplication = FALSE
90
 
91
		If InStr( sSEPARATOR & Session(enumUSER_APPLICATIONS_SESSION) & sSEPARATOR,  sSEPARATOR & nAppId & sSEPARATOR)  Then
92
			UserApplication = TRUE
93
		End If
94
 
95
	End Function
96
	'-----------------------------------------------------------------------------------------------------------------
97
	Public Function BeginRegion ( sControlObjName )
98
		Response.write "<table width='100%'  border='0' cellspacing='0' cellpadding='1'>"
99
		Response.write "  <tr>"
100
		Response.write "    <td bgcolor='#FF0000'>&nbsp;<a href='#' class='body_linkw'><b>"& sControlObjName &"</b></a>&nbsp;</td>"
101
		Response.write "  </tr>"
102
		Response.write "  <tr>"
103
		Response.write "    <td bgcolor='#FF0000'>"
104
		Response.write "		<table width='100%'  border='0' cellspacing='0' cellpadding='0'>"
105
		Response.write "  			<tr><td bgcolor='#FFFFFF'>"
106
	End Function
107
	'-----------------------------------------------------------------------------------------------------------------
108
	Public Function EndRegion ( sControlObjName )
109
		Response.write " 	</td></tr></table>"
110
		Response.write " </td></tr>"
111
		Response.write "</table>"
112
	End Function
113
	'-----------------------------------------------------------------------------------------------------------------
114
	Private Function Extract( sField, sString )
115
		Dim tempArr, tempSTR
116
 
117
		tempArr = Split( sString, sSEPARATOR )
118
		tempSTR = Join( Filter( tempArr, sField &"=" ) )	' Append "=" to field name to get e.g. "user_name="
119
 
120
		Extract = Right( tempSTR, Len(tempSTR) - Len( sField &"=" ))	' Strip the filed name from value
121
 
122
	End Function
123
	'-----------------------------------------------------------------------------------------------------------------
124
	Private Function GetDataPermission ( sTableName, nRowId, nPermissionType )
125
		Dim cPermissionValue
126
 
127
		'--- Get Row Permission ---
128
		cPermissionValue = mobjRowPermissions.Item ( Cstr( sTableName &"_"& nRowId &"_"& nPermissionType ) )
129
 
130
 
131
		'Response.write " VALUE="& cPermissionValue &" for "& sTableName &" "& nRowId &" "& nPermissionType &", "
132
 
133
 
134
		If IsNull( cPermissionValue )  OR  ( cPermissionValue = "" ) Then
135
 
136
			'--- Get Default Table Permission ---
137
			cPermissionValue = mobjTablePermissions.Item ( Cstr( sTableName &"_"& nPermissionType ) )
138
 
139
			'--- Raise Exception if Table Default is not found ---
140
			'If IsNull( cPermissionValue )  OR  ( cPermissionValue = "" ) Then
141
			'	Err.Raise 8, "Default Table Permission is Not Found.", "sTableName="& sTableName &", nPermissionType="& nPermissionType
142
			'	Exit Function
143
			'End If
144
 
145
 
146
			'Response.write " VALUE="& cPermissionValue &" for "& sTableName &" "& nRowId &" "& nPermissionType &", "
147
 
148
		End If
149
 
150
 
151
		'--- Return TRUE / FALSE ---
152
		GetDataPermission = FALSE
153
		If cPermissionValue = enumDB_YES Then
154
			GetDataPermission = TRUE
155
		End If
156
 
157
	End Function
158
	'-----------------------------------------------------------------------------------------------------------------
159
	Public Function IsDataVisible ( sTableName, nRowId, sControlObjName )
160
		IsDataVisible = FALSE
161
 
162
		If IsVisible ( sControlObjName ) Then
163
			IsDataVisible = GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_VISIBLE )
164
		End If
165
 
166
	End Function
167
	'-----------------------------------------------------------------------------------------------------------------
168
	Public Function IsDataActive ( sTableName, nRowId, sControlObjName )
169
		IsDataActive = FALSE
170
 
171
		If IsActive ( sControlObjName ) Then
172
			IsDataActive = TRUE
173
		Else
174
			IsDataActive = GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_ACTIVE )
175
		End If
176
 
177
	End Function
178
	'-----------------------------------------------------------------------------------------------------------------
179
	Public Function IsActive ( sControlObjName )
180
		If ( mobjStaticControl.Item (Cstr( sControlObjName &"_"&  enumDB_PERMISSION_TYPE_ACTIVE )) = enumDB_YES )   OR   ( IsNull(sControlObjName) )Then
181
			IsActive = TRUE
182
		Else
183
			IsActive = FALSE
184
		End If
185
 
186
	End Function
187
	'-----------------------------------------------------------------------------------------------------------------
188
	Public Function IsVisible ( sControlObjName )
189
		If mobjStaticControl.Item (Cstr( sControlObjName &"_"& enumDB_PERMISSION_TYPE_VISIBLE )) = enumDB_YES Then
190
			IsVisible = TRUE
191
		Else
192
			IsVisible = FALSE
193
		End If
194
	End Function
195
	'-----------------------------------------------------------------------------------------------------------------
196
	' This function is used for HTML conponents that support attribute "disabled". i.e. Button, dropdown, etc.
197
	Public Function IsComponentDisabled ( sControlObjName )
198
		If IsVisible ( sControlObjName ) Then
199
			IsComponentDisabled = ""
200
		Else
201
			IsComponentDisabled = " disabled "
202
		End If
203
	End Function
204
	'-----------------------------------------------------------------------------------------------------------------
205
	Public Sub LoadDataPermissions ( aRows )
206
		Dim numOfRows, rowNum
207
		Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission
208
 
209
		InxTableName		= 0
210
		InxRefColumnVal		= 1
211
		InxPermissionType	= 2
212
		InxPermission		= 3
213
 
214
		numOfRows = UBound( aRows, 2 )
215
 
216
		For rowNum = 0 To numOfRows
217
 
218
 
219
			If aRows( InxRefColumnVal, rowNum ) = 0 Then
220
				'--- Set Table Default Permission (i.e. "0" wildcard for "all records") ---
221
				mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = aRows( InxPermission, rowNum )
222
 
223
			Else
224
				'--- Set Row Permission ---
225
				mobjRowPermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxRefColumnVal, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = aRows( InxPermission, rowNum )
226
 
227
			End If
228
 
229
 
230
		Next
231
 
232
		'Response.write "mobjRowPermissions.Keys="& Join ( mobjRowPermissions.Keys, ", ") &"<br>"
233
		'Response.write "mobjRowPermissions.Items="& Join ( mobjRowPermissions.Items, ", ") &"<br>"
234
		'Response.write "mobjTablePermissions.Keys="& Join ( mobjTablePermissions.Keys, ", ") &"<br>"
235
		'Response.write "mobjTablePermissions.Items="& Join ( mobjTablePermissions.Items, ", ") &"<br>"
236
	End Sub
237
	'-----------------------------------------------------------------------------------------------------------------
238
	Public Sub LoadDataPermissionVariations ( aRows )
239
		Dim numOfRows, rowNum
240
		Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission
241
 
242
		InxTableName		= 0
243
		InxRefColumnVal		= 1
244
		InxPermissionType	= 2
245
		InxPermission		= 3
246
 
247
		numOfRows = UBound( aRows, 2 )
248
 
249
		For rowNum = 0 To numOfRows
250
			If mobjRowPermissions.Exists ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )Then 
251
				mobjRowPermissions.Remove ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )
252
			End If
253
 
254
			mobjRowPermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxRefColumnVal, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = CStr( aRows( InxPermission, rowNum ) )
255
 
256
			If aRows( InxPermission, rowNum ) = enumDB_NO Then
257
				mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_YES
258
			Else
259
				mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_NO
260
 
261
			End If
262
 
263
 
264
		Next
265
		'Response.write "mobjRowPermissions.Keys="& Join ( mobjRowPermissions.Keys, ", ")
266
	End Sub
267
	'-----------------------------------------------------------------------------------------------------------------
268
	Public Sub LoadStaticPermissions ( aRows )
269
		Dim numOfRows, rowNum
270
		Dim InxObjName, InxPermissionType, InxPermission
271
 
272
		InxObjName 			= 0
273
		InxPermissionType	= 1
274
		InxPermission		= 2
275
 
276
		numOfRows = UBound( aRows, 2 )
277
 
278
		For rowNum = 0 To numOfRows
279
 
280
			'Response.write " "& aRows( InxObjName, rowNum ) &"_"&  aRows( InxPermissionType, rowNum ) &"="& CStr( aRows( InxPermission, rowNum ) ) &"<br>"
281
			'Response.write "--"& mobjStaticControl.Count &"<br>"
282
 
283
			mobjStaticControl.Add ( aRows( InxObjName, rowNum ) &"_"&  aRows( InxPermissionType, rowNum ) ), CStr( aRows( InxPermission, rowNum ) )
284
 
285
		Next
286
 
287
 
288
	End Sub
289
	'-----------------------------------------------------------------------------------------------------------------
290
	Private Function AutoLogonUser ( sUserId )
291
		Dim rsQry, query, is_Online
292
		AutoLogonUser = FALSE
293
 
294
		'-- Kill Any pervious User Permissions stored in session --
295
		Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
296
		Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
297
 
298
		'--- Get if user is loged on from DB ---
299
		moOraDatabase.Parameters.Add "USER_ID",  sUserId, ORAPARM_INPUT, ORATYPE_NUMBER
300
 
301
		query = "SELECT usr.IS_ONLINE  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
302
		Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
303
 
304
		If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
305
			is_Online = rsQry("is_online")
306
		End If
307
 
308
		moOraDatabase.Parameters.Remove "USER_ID"
309
		rsQry.Close
310
		Set rsQry = Nothing
311
 
312
 
313
		'--- Check if User is still Loged on ---
314
		If is_Online = "Y" Then
315
			Call SessionsAndCookieSetup ( sUserId )
316
 
317
		End If
318
 
319
 
320
	End Function
321
	'-----------------------------------------------------------------------------------------------------------------
322
	Public Sub LogonUser ( sUserName, sUserPassword )
323
		Dim rsQry, query, sMessage
324
		sMessage = NULL
325
 
326
		'-- Kill Any pervious User Permissions stored in session --
327
		Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
328
		Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
329
 
330
		moOraDatabase.Parameters.Add "USER_NAME",   	sUserName, 		ORAPARM_INPUT, ORATYPE_VARCHAR2
331
 
332
		query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
333
		Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
334
 
335
		moOraDatabase.Parameters.Remove "USER_NAME"
336
 
337
		'--- Try Authenticating ---
338
		If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
339
			' User Found !
340
 
341
			If rsQry("is_disabled") = enumDB_YES  Then
342
				' User Disabled !
343
				sMessage = "Account <b>"& sUserName &"</b> is Disabled!"
344
 
345
				'-- Login Trail --
346
				Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
347
 
348
				'-- Raise Exception --
349
				Err.Raise 8, sMessage, "" 
350
 
351
			Else
352
 
353
				' Proceed with authentication
354
				If Authenticated( sUserName, sUserPassword, rsQry("user_password"), rsQry("domain") ) Then
355
					' Login OK.
356
					Call SessionsAndCookieSetup ( rsQry("user_id") )
357
 
358
					' Tag user login
359
					Call TagLogon ( rsQry )
360
 
361
				End If
362
 
363
 
364
			End If
365
 
366
		Else
367
			' User Not Found !
368
			sMessage = "Account <b>"& sUserName &"</b> Not Found!"
369
 
370
			'-- Login Trail --
371
			Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
372
 
373
			'-- Raise Exception --
374
			Err.Raise 8, sMessage, "Make sure your Username is correct <br>OR <br>Please go back and register if you are new user. " 
375
 
376
		End If
377
		'--------------------------
378
 
379
 
380
 
381
 
382
		rsQry.Close()
383
		Set rsQry = Nothing
384
	End Sub
385
	'-----------------------------------------------------------------------------------------------------------------
386
	Public Function RequiresPasswordUpdate ( sUserName )
387
		Dim rsQry, query, sMessage
388
		sMessage = NULL
389
 
390
		moOraDatabase.Parameters.Add "USER_NAME",   	sUserName, 		ORAPARM_INPUT, ORATYPE_VARCHAR2
391
 
392
		query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
393
		Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
394
 
395
 
396
		'--- Try Authenticating ---
397
		RequiresPasswordUpdate = FALSE
398
		If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
399
			If IsNull(rsQry("user_password")) AND IsNull(rsQry("domain")) Then
400
				RequiresPasswordUpdate = TRUE
401
			End If
402
 
403
		End If
404
		'--------------------------
405
 
406
 
407
		moOraDatabase.Parameters.Remove "USER_NAME"
408
 
409
		rsQry.Close()
410
		Set rsQry = Nothing
411
	End Function
412
	'-----------------------------------------------------------------------------------------------------------------
413
	Public Sub LogoffUser ()
414
		'-- Login Trail --
415
		Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGOFF, UserName, NULL )
416
 
417
		'-- Kill User Session --
418
		Session.Abandon
419
 
420
	End Sub
421
	'-----------------------------------------------------------------------------------------------------------------
422
	Private Sub SessionsAndCookieSetup ( nUserId )
423
		' Store User details in session
424
		Call SetUserEnvironment ( nUserId )
425
 
426
		' Aquire Login Token for Single Application
427
		Session(enumLOGIN_TOKEN_SESSION) = Session.SessionID
428
 
429
		Session.Timeout = enumSESSION_TIMEOUT
430
	End Sub
431
	'-----------------------------------------------------------------------------------------------------------------
432
	Private Function Authenticated ( ByRef sUserName, ByRef sUserPassword, sDBUserPassword, sDBdomain )
433
		Dim objLoginAuth, return, sMessage
434
		sMessage = NULL
435
 
436
		Authenticated = FALSE
437
 
438
		If NOT IsNull(sDBdomain) Then
439
			' DOMAIN auth.
440
 
441
			Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")
442
 
443
			return = -1
444
			return = objLoginAuth.AuthenticateUser ( sUserName, sUserPassword, sDBdomain )
445
 
446
			' From MSDN System Error Codes
447
			' 0 - The operation completed successfully.
448
			' 1326 - Logon failure: unknown user name or bad password.
449
			' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
450
			' 1909 - The referenced account is currently locked out and may not be used to log on.
451
 
452
			Select Case return
453
				Case 0, 1385
454
					'Login ok
455
					Authenticated = TRUE
456
 
457
					'-- Login Trail --
458
					Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
459
 
460
				Case 1909
461
					sMessage = "Account <b>"& sUserName &"</b> at "& sDBdomain &" domain is currently locked!"
462
 
463
					'-- Login Trail --
464
					Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
465
 
466
					'-- Raise Exception --
467
					Err.Raise 8, sMessage, ""
468
 
469
 
470
				Case Else
471
					sMessage = "Password is incorrect for <b>"& sUserName &"</b> at "& sDBdomain &" domain!"
472
 
473
					'-- Login Trail --
474
					Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
475
 
476
					'-- Raise Exception --
477
					Err.Raise 8, sMessage, sDBdomain &" domain returns system error code "& return
478
 
479
			End Select
480
 
481
			Set objLoginAuth = Nothing
482
 
483
		Else
484
			' LOCAL auth.
485
			If IsLocaPasswordCorrect ( sUserName, sUserPassword ) Then
486
				'Login ok
487
				Authenticated = TRUE
488
 
489
				'-- Login Trail --
490
				Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
491
 
492
			Else
493
				sMessage = "Password is incorrect for <b>"& sUserName &"</b>!"
494
 
495
				'-- Login Trail --
496
				Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
497
 
498
				'-- Raise Exception --
499
				Err.Raise 8, sMessage, "Please try again and make sure you do not have Caps Lock on."
500
 
501
			End If
502
 
503
		End If
504
 
505
 
506
 
507
	End Function
508
	'-----------------------------------------------------------------------------------------------------------------
509
	Private Function IsLocaPasswordCorrect ( sUserName, sPassword )
510
 
511
		moOraDatabase.Parameters.Add "USER_NAME",   sUserName, 	ORAPARM_INPUT, ORATYPE_VARCHAR2
512
		moOraDatabase.Parameters.Add "PASSWORD",    sPassword, 	ORAPARM_INPUT, ORATYPE_VARCHAR2
513
		moOraDatabase.Parameters.Add "RETURN_CODE",   0, 		ORAPARM_OUTPUT, ORATYPE_NUMBER
514
 
515
		moOraDatabase.ExecuteSQL _
516
		"BEGIN   :RETURN_CODE := PK_SECURITY.IS_LOCAL_PASSWORD_CORRECT ( :USER_NAME, :PASSWORD );   END;"
517
 
518
		If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 1 Then
519
			IsLocaPasswordCorrect = TRUE
520
		Else
521
			IsLocaPasswordCorrect = FALSE
522
		End If
523
 
524
		moOraDatabase.Parameters.Remove "USER_NAME"
525
		moOraDatabase.Parameters.Remove "PASSWORD"
526
		moOraDatabase.Parameters.Remove "RETURN_CODE"
527
 
528
	End Function
529
	'-----------------------------------------------------------------------------------------------------------------
530
	Public Sub SetPassword ( sUserName, sPasswordA, sPasswordB )
531
		If (sUserName = "")  OR  (sPasswordA = "")  OR  (sPasswordB = "") Then
532
			Err.Raise 8, "Username and both Passwords are required !", ""
533
			Exit Sub
534
		End If
535
 
536
 
537
		moOraDatabase.Parameters.Add "USER_NAME",   sUserName, 		ORAPARM_INPUT, ORATYPE_VARCHAR2
538
		moOraDatabase.Parameters.Add "PASSWORDA",   sPasswordA, 	ORAPARM_INPUT, ORATYPE_VARCHAR2
539
		moOraDatabase.Parameters.Add "PASSWORDB",   sPasswordB, 	ORAPARM_INPUT, ORATYPE_VARCHAR2
540
		moOraDatabase.Parameters.Add "RETURN_CODE",   0, 		ORAPARM_OUTPUT, ORATYPE_NUMBER
541
 
542
 
543
		moOraSession.BeginTrans
544
 
545
		moOraDatabase.ExecuteSQL _
546
		"BEGIN   :RETURN_CODE := PK_SECURITY.SET_PASSWORD ( :USER_NAME, :PASSWORDA, :PASSWORDB );   END;"
547
 
548
		moOraSession.CommitTrans
549
 
550
 
551
		If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = -1 Then
552
			Err.Raise 8, "Passwords do not match !", "Make sure that you type correctly both passwords."
553
		End If
554
 
555
 
556
		moOraDatabase.Parameters.Remove "USER_NAME"
557
		moOraDatabase.Parameters.Remove "PASSWORDA"
558
		moOraDatabase.Parameters.Remove "PASSWORDB"
559
		moOraDatabase.Parameters.Remove "RETURN_CODE"
560
 
561
	End Sub
562
	'-----------------------------------------------------------------------------------------------------------------
563
	Private Sub LoginTrail ( nEvent, sUserName, sMessage )
564
 
565
		moOraDatabase.Parameters.Add "EVENT_ENUM",   		nEvent, 		ORAPARM_INPUT, ORATYPE_NUMBER
566
		moOraDatabase.Parameters.Add "LOGIN_USER_NAME",   sUserName, 		ORAPARM_INPUT, ORATYPE_VARCHAR2
567
		moOraDatabase.Parameters.Add "CLIENT_IP",   		Request.ServerVariables("REMOTE_ADDR"), 		ORAPARM_INPUT, ORATYPE_VARCHAR2
568
		moOraDatabase.Parameters.Add "APPLICATION_ID",   	APPLICATION_ID, 		ORAPARM_INPUT, ORATYPE_NUMBER
569
		moOraDatabase.Parameters.Add "LOGIN_COMMENTS",   	sMessage, 		ORAPARM_INPUT, ORATYPE_VARCHAR2
570
 
571
 
572
		moOraSession.BeginTrans
573
 
574
		moOraDatabase.ExecuteSQL _
575
		"BEGIN   pk_AMUtils.Log_Access ( :EVENT_ENUM, :LOGIN_USER_NAME, :CLIENT_IP, :APPLICATION_ID, :LOGIN_COMMENTS );   END;"
576
 
577
		moOraSession.CommitTrans
578
 
579
 
580
		moOraDatabase.Parameters.Remove "EVENT_ENUM"
581
		moOraDatabase.Parameters.Remove "LOGIN_USER_NAME"
582
		moOraDatabase.Parameters.Remove "CLIENT_IP"
583
		moOraDatabase.Parameters.Remove "APPLICATION_ID"
584
		moOraDatabase.Parameters.Remove "LOGIN_COMMENTS"
585
 
586
 
587
	End Sub
588
	'-----------------------------------------------------------------------------------------------------------------
589
	Private Sub TagLogon ( oRsQry )
590
		oRsQry.Edit()
591
 
592
		oRsQry("is_online").Value = "Y"
593
		oRsQry("online_at").Value = Request.ServerVariables("REMOTE_ADDR")
594
 
595
		oRsQry.Update()
596
	End Sub
597
	'-----------------------------------------------------------------------------------------------------------------
598
	Private Sub SetUserEnvironment ( nUser_id )
599
		Dim rsUser, query, tempSTR
600
 
601
		moOraDatabase.Parameters.Add "USER_ID", nUser_id, ORAPARM_INPUT, ORATYPE_NUMBER
602
 
603
 
604
 
605
		'---- Get User Details ----
606
		query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
607
		Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
608
 
609
		If (NOT rsUser.BOF) AND (NOT rsUser.EOF) Then
610
			Session(enumUSER_ID_SESSION) = rsUser("user_id")
611
 
612
			Session(enumUSER_DETAILS_SESSION) = _
613
				"user_name="& rsUser("user_name") & sSEPARATOR &_
614
				"full_name="& rsUser("full_name") & sSEPARATOR &_
615
				"user_email="& rsUser("user_email") & sSEPARATOR &_
616
				"last_visit="& rsUser("last_visit") & sSEPARATOR &_
617
				"domain="& rsUser("domain") 
618
 
619
		End If
620
 
621
 
622
 
623
		'---- Get User Applications ----
624
		query = "SELECT ua.APP_ID  FROM USER_APPLICATIONS ua  WHERE ua.USER_ID = :USER_ID"
625
		Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
626
		tempSTR = ""
627
		While (NOT rsUser.BOF) AND (NOT rsUser.EOF) 
628
			tempSTR = tempSTR & sSEPARATOR & rsUser("app_id")
629
			rsUser.MoveNext()
630
		WEnd
631
 
632
		If tempSTR <> "" Then
633
			Session(enumUSER_APPLICATIONS_SESSION) = Right( tempSTR, Len(tempSTR) - Len(sSEPARATOR) )	'Remove first separator
634
		Else
635
			Session(enumUSER_APPLICATIONS_SESSION) = 0
636
		End If
637
 
638
 
639
 
640
		moOraDatabase.Parameters.Remove "USER_ID"
641
 
642
		rsUser.Close()
643
		Set rsUser = Nothing
644
	End Sub
645
	'-----------------------------------------------------------------------------------------------------------------
646
	Private Sub GetApplicationRunningLevel ( )
647
		Dim rsQry, query
648
 
649
 
650
		'--- Get if user is loged on from DB ---
651
		moOraDatabase.Parameters.Add "APP_ID",  APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER
652
 
653
		query = _
654
		" SELECT app.APP_ID,"&_
655
		"	     app.APPLICATION_NAME,"&_
656
		"	     app.IS_RUNNING"&_
657
		"   FROM APPLICATIONS app"&_
658
		"  WHERE app.APP_ID = :APP_ID"
659
		Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
660
 
661
		If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
662
			mbIsApplicationRunning = FALSE
663
			If rsQry("is_running") = enumDB_YES Then
664
				mbIsApplicationRunning = TRUE
665
			End If
666
		End If
667
 
668
		moOraDatabase.Parameters.Remove "APP_ID"
669
		rsQry.Close
670
		Set rsQry = Nothing
671
 
672
	End Sub
673
	'-----------------------------------------------------------------------------------------------------------------
674
	Private Sub Class_Initialize()
675
		'// Perform action on creation of object. e.g. Set myObj = New ThisClassName
676
		Set mobjStaticControl = CreateObject("Scripting.Dictionary")
677
		Set mobjTablePermissions = CreateObject("Scripting.Dictionary")
678
		Set mobjRowPermissions = CreateObject("Scripting.Dictionary")
679
		mbIsApplicationRunning = NULL	' The state of application
680
 
681
		sSEPARATOR = "||"
682
 
683
	End Sub
684
	'-----------------------------------------------------------------------------------------------------------------
685
	Private Sub Class_Terminate()
686
		'// Perform action on object disposal. e.g. Set myObj = Nothing
687
		Set mobjStaticControl = Nothing
688
		Set mobjRowPermissions = Nothing
689
		Set mobjTablePermissions = Nothing
690
 
691
	End Sub
692
	'-----------------------------------------------------------------------------------------------------------------
693
End Class
694
%>