Subversion Repositories DevTools

Rev

Rev 3927 | Details | Compare with Previous | Last modification | View Log | RSS feed

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