Subversion Repositories DevTools

Rev

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