<% '============================================================= '// '// Access Control '// This class is agnostic of the appliaction and could be common '// to all Manager Suite tools '// '============================================================= %> <% '--------------- Global Constants ---------------- Const enumSESSION_TIMEOUT = 600 ' Minutes Const enumSESSION_LAST_REQUEST = "AM_SESSION_LAST_REQUEST" Const enumLOGIN_TOKEN_SESSION = "AM_LOGIN_TOKEN" Const enumUSER_ID_SESSION = "AM_USER_ID" Const enumUSER_DETAILS_SESSION = "AM_USER_DETAILS" Const enumUSER_APPLICATIONS_SESSION = "AM_USER_APPLICATIONS" Const enumUSER_STATIC_PERMISSIONS = "AM_USER_STATIC_PERMISSIONS" Const enumUSER_DATA_PERMISSIONS = "AM_USER_DATA_PERMISSIONS" Const enumUSER_TEMP_VARIABLE = "AM_USER_TEMP_VARIABLE" Const enumACCESS_MANAGER_EVENT_LOGON_SUCCESS = 1 Const enumACCESS_MANAGER_EVENT_LOGON_FAIL = -1 Const enumACCESS_MANAGER_EVENT_LOGOFF = 0 Const enumACCESS_MANAGER_EVENT_SESSION_EXPIRE = 2 '------------------------------------------------- Class AccessControl Private moOraSession Private moOraDatabase Private mobjStaticControl Private mobjRowPermissions Private mobjTablePermissions Private sSEPARATOR Private mbIsApplicationRunning Public bDebug Public Property Let objOraDatabase ( ByRef oOraDatabase ) Set moOraDatabase = oOraDatabase End Property Public Property Let objOraSession ( ByRef oOraSession ) Set moOraSession = oOraSession End Property Public Property Get UserLogedIn () UserLogedIn = FALSE ' Check for Session Token If (Session(enumLOGIN_TOKEN_SESSION) <> "") AND NOT IsNull(Session(enumLOGIN_TOKEN_SESSION)) Then UserLogedIn = TRUE End If End Property Public Property Get UserId () UserId = Session(enumUSER_ID_SESSION) End Property Public Property Get UserName () UserName = Extract( "user_name", Session(enumUSER_DETAILS_SESSION) ) End Property Public Property Get FullName () FullName = Extract( "full_name", Session(enumUSER_DETAILS_SESSION) ) End Property Public Property Get UserEmail () UserEmail = Extract( "user_email", Session(enumUSER_DETAILS_SESSION) ) End Property Public Property Get LastVisit () LastVisit = Extract( "last_visit", Session(enumUSER_DETAILS_SESSION) ) End Property Public Property Get Domain () Domain = Extract( "domain", Session(enumUSER_DETAILS_SESSION) ) End Property Public Property Get IsApplicationRunning() If IsNull(mbIsApplicationRunning) Then Call GetApplicationRunningLevel () End If IsApplicationRunning = mbIsApplicationRunning End Property Public Property Get isDevSystem() isDevSystem = IsEmpty(Application("LiveSystem")) End Property '----------------------------------------------------------------------------------------------------------------- Public Function UserApplication ( nAppId ) UserApplication = FALSE If InStr( sSEPARATOR & Session(enumUSER_APPLICATIONS_SESSION) & sSEPARATOR, sSEPARATOR & nAppId & sSEPARATOR) Then UserApplication = TRUE End If End Function '----------------------------------------------------------------------------------------------------------------- Public Sub dumpAll() Response.Write "
Pretty Dictionary mobjStaticControl
"
    Response.Write DICToutput(mobjStaticControl)
    Response.Write "

Pretty Dictionary mobjRowPermissions
"
    Response.Write DICToutput(mobjRowPermissions)
    Response.Write "

Pretty Dictionary mobjTablePermissions
"
    Response.Write DICToutput(mobjTablePermissions)
    Response.Write "

End" End Sub Private Sub RR(txt) If bDebug Then Response.Write "
" & txt End If End Sub '----------------------------------------------------------------------------------------------------------------- Public Function BeginRegion ( sControlObjName ) Response.write "" Response.write " " Response.write " " Response.write " " Response.write " " Response.write " " Response.write "
 "& sControlObjName &" 
" Response.write " " Response.write "
" End Function '----------------------------------------------------------------------------------------------------------------- Public Function EndRegion ( sControlObjName ) Response.write "
" Response.write "
" End Function '----------------------------------------------------------------------------------------------------------------- Private Function Extract( sField, sString ) Dim tempArr, tempSTR tempArr = Split( sString, sSEPARATOR ) tempSTR = Join( Filter( tempArr, sField &"=" ) ) ' Append "=" to field name to get e.g. "user_name=" If tempSTR <> "" Then Extract = Right( tempSTR, Len(tempSTR) - Len( sField &"=" )) ' Strip the fieled name from value Else Extract = "" End If End Function '----------------------------------------------------------------------------------------------------------------- Private Function GetDataPermission ( sTableName, nRowId, nPermissionType, sControlObjName ) Dim cPermissionValue Dim key : key = Cstr( sTableName &"_"& nRowId &"_"& sControlObjName &"_"& nPermissionType ) '--- Get Row Permission --- cPermissionValue = "" If mobjRowPermissions.Exists( key ) Then cPermissionValue = mobjRowPermissions.Item ( key ) End If If IsNull( cPermissionValue ) OR ( cPermissionValue = "" ) Then '--- Get Default Table Permission --- Dim pkey : pkey = Cstr( sTableName &"_"& sControlObjName &"_"& nPermissionType ) cPermissionValue = "" If mobjTablePermissions.Exists( pkey ) Then cPermissionValue = mobjTablePermissions.Item ( pkey ) End If End If '--- Return TRUE / FALSE --- GetDataPermission = FALSE If cPermissionValue = enumDB_YES Then GetDataPermission = TRUE End If End Function '----------------------------------------------------------------------------------------------------------------- Public Function IsDataVisible ( sTableName, nRowId, sControlObjName ) IsDataVisible = FALSE If IsVisible ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_VISIBLE, sControlObjName ) Then IsDataVisible = TRUE End If End Function '----------------------------------------------------------------------------------------------------------------- Public Function IsDataActive ( sTableName, nRowId, sControlObjName ) IsDataActive = FALSE If IsActive ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_ACTIVE, sControlObjName ) Then IsDataActive = TRUE End If End Function '----------------------------------------------------------------------------------------------------------------- Public Function IsActive ( sControlObjName ) Dim key : key = Cstr( sControlObjName &"_"& enumDB_PERMISSION_TYPE_ACTIVE ) IsActive = FALSE If mobjStaticControl.Exists(key) Then If ( mobjStaticControl.Item (key) = enumDB_YES ) OR ( IsNull(sControlObjName) )Then IsActive = TRUE End If End If End Function '----------------------------------------------------------------------------------------------------------------- Public Function IsVisible ( sControlObjName ) Dim key : key = Cstr( sControlObjName &"_"& enumDB_PERMISSION_TYPE_VISIBLE ) IsVisible = FALSE If mobjStaticControl.Exists(key) Then If mobjStaticControl.Item (key) = enumDB_YES Then IsVisible = TRUE End If End If End Function '----------------------------------------------------------------------------------------------------------------- ' This function is used for HTML conponents that support attribute "disabled". i.e. Button, dropdown, etc. Public Function IsComponentDisabled ( sControlObjName ) If IsVisible ( sControlObjName ) Then IsComponentDisabled = "" Else IsComponentDisabled = " disabled " End If End Function '----------------------------------------------------------------------------------------------------------------- Public Sub LoadDataPermissions ( aRows ) Dim numOfRows, rowNum Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission, InxControl Dim TableName, RefColumnVal, PermissionType, Permission, Control Dim key InxTableName = 0 InxRefColumnVal = 1 InxPermissionType = 2 InxPermission = 3 InxControl = 4 ' Nothing to do ifthere is no data If IsNull(aRows) OR IsEmpty(aRows) Then Exit Sub End If numOfRows = UBound( aRows, 2 ) For rowNum = 0 To numOfRows TableName = aRows( InxTableName, rowNum ) RefColumnVal = aRows( InxRefColumnVal, rowNum ) PermissionType = aRows( InxPermissionType, rowNum ) Permission = aRows( InxPermission, rowNum ) Control = aRows( InxControl, rowNum ) If RefColumnVal = 0 Then '--- Set Table Default Permission (i.e. "0" wildcard for "all records") --- key = TableName & "_" & Control & "_" & PermissionType ' ' Data appears to be wrong and useless ' Don't populate this table 'mobjTablePermissions.Item ( key ) = Permission Else '--- Set Row Permission --- key = TableName & "_" & RefColumnVal & "_" & Control & "_" & PermissionType mobjRowPermissions.Item ( key ) = Permission End If Next 'Response.Write "
Pretty Dictionary mobjRowPermissions
"
    'Response.Write DICToutput(mobjRowPermissions)
    'Response.Write "

Pretty Dictionary mobjTablePermissions
"
    'Response.Write DICToutput(mobjTablePermissions)
    'Response.write "
" End Sub '----------------------------------------------------------------------------------------------------------------- Public Sub LoadDataPermissionVariations ( aRows ) Dim numOfRows, rowNum Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission InxTableName = 0 InxRefColumnVal = 1 InxPermissionType = 2 InxPermission = 3 numOfRows = UBound( aRows, 2 ) For rowNum = 0 To numOfRows If mobjRowPermissions.Exists ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )Then mobjRowPermissions.Remove ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) ) End If mobjRowPermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxRefColumnVal, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = CStr( aRows( InxPermission, rowNum ) ) If aRows( InxPermission, rowNum ) = enumDB_NO Then mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = enumDB_YES Else mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = enumDB_NO End If Next 'Response.write "mobjRowPermissions.Keys="& Join ( mobjRowPermissions.Keys, ", ") End Sub '----------------------------------------------------------------------------------------------------------------- Public Sub LoadStaticPermissions ( aRows ) Dim numOfRows, rowNum Dim InxObjName, InxPermissionType, InxPermission Dim dKey, dValue InxObjName = 0 InxPermissionType = 1 InxPermission = 2 numOfRows = UBound( aRows, 2 ) For rowNum = 0 To numOfRows dKey = aRows( InxObjName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) dValue = CStr( aRows( InxPermission, rowNum ) ) mobjStaticControl.Add ( dKey ), dValue Next 'Response.Write "
Pretty Dictionary LoadStaticPermissions mobjStaticControl
"
      'Response.Write DICToutput(mobjStaticControl)
      'Response.Write "
" End Sub '----------------------------------------------------------------------------------------------------------------- Private Function AutoLogonUser ( sUserId ) Dim rsQry, query, is_Online AutoLogonUser = FALSE '-- Kill Any pervious User Permissions stored in session -- Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS) Session.Contents.Remove(enumUSER_DATA_PERMISSIONS) '--- Get if user is logged on from DB --- moOraDatabase.Parameters.Add "USER_ID", sUserId, ORAPARM_INPUT, ORATYPE_NUMBER query = "SELECT usr.IS_ONLINE FROM USERS usr WHERE usr.USER_ID = :USER_ID" Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then is_Online = rsQry("is_online") End If moOraDatabase.Parameters.Remove "USER_ID" rsQry.Close Set rsQry = Nothing '--- Check if User is still Logged on --- If is_Online = "Y" Then Call SessionsAndCookieSetup ( sUserId ) End If End Function '----------------------------------------------------------------------------------------------------------------- Public Sub LogonUser ( sUserName, sUserPassword ) Dim rsQry, query, sMessage sMessage = NULL '-- Kill Any pervious User Permissions stored in session -- Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS) Session.Contents.Remove(enumUSER_DATA_PERMISSIONS) moOraDatabase.Parameters.Add "USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 query = "SELECT usr.* FROM USERS usr WHERE usr.USER_NAME = :USER_NAME" Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) moOraDatabase.Parameters.Remove "USER_NAME" '--- Try Authenticating --- If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then ' User Found ! If rsQry("is_disabled") = enumDB_YES Then ' User Disabled ! sMessage = "Account "& sUserName &" is Disabled!" '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) '-- Raise Exception -- Err.Raise 8, sMessage, "" Else ' Proceed with authentication If Authenticated( sUserName, sUserPassword, rsQry("user_password"), rsQry("domain") ) Then ' Login OK. Call SessionsAndCookieSetup ( rsQry("user_id") ) ' Tag user login Call TagLogon ( rsQry ) End If End If Else ' User Not Found ! sMessage = "Account "& sUserName &" Not Found!" '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) '-- Raise Exception -- Err.Raise 8, sMessage, "Make sure your Username is correct
OR
Please go back and register if you are new user. " End If '-------------------------- rsQry.Close() Set rsQry = Nothing End Sub '----------------------------------------------------------------------------------------------------------------- Public Sub MasqueradeAsUser ( sUserName, sRealUserName ) Dim rsQry, query, sMessage sMessage = NULL moOraDatabase.Parameters.Add "USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 query = "SELECT usr.* FROM USERS usr WHERE usr.USER_NAME = :USER_NAME" Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) moOraDatabase.Parameters.Remove "USER_NAME" '--- Try Authenticating --- If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then ' User Found ! If rsQry("is_disabled") = enumDB_YES Then ' User Disabled ! sMessage = "Account "& sUserName &" is Disabled!" '-- Raise Exception -- Err.Raise 8, sMessage, "" Else ' Proceed with authentication ' Kill Any pervious User Permissions stored in session Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS) Session.Contents.Remove(enumUSER_DATA_PERMISSIONS) Call SessionsAndCookieSetup ( rsQry("user_id") ) '-- Login Trail -- sMessage = "Masquerading as " & sUserName Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sRealUserName, sMessage ) sMessage = "Masqueraded by " & sRealUserName Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) End If Else ' User Not Found ! sMessage = "Account "& sUserName &" Not Found!" '-- Raise Exception -- Err.Raise 8, sMessage, "Make sure the Username is correct." End If '-------------------------- rsQry.Close() Set rsQry = Nothing End Sub '----------------------------------------------------------------------------------------------------------------- Public Function RequiresPasswordUpdate ( sUserName ) Dim rsQry, query, sMessage sMessage = NULL moOraDatabase.Parameters.Add "USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 query = "SELECT usr.* FROM USERS usr WHERE usr.USER_NAME = :USER_NAME" Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) '--- Try Authenticating --- RequiresPasswordUpdate = FALSE If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then If IsNull(rsQry("user_password")) AND IsNull(rsQry("domain")) Then RequiresPasswordUpdate = TRUE End If End If '-------------------------- moOraDatabase.Parameters.Remove "USER_NAME" rsQry.Close() Set rsQry = Nothing End Function '----------------------------------------------------------------------------------------------------------------- Public Sub LogoffUser () '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGOFF, UserName, NULL ) '-- Kill User Session -- Session.Abandon End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub SessionsAndCookieSetup ( nUserId ) ' Store User details in session Call SetUserEnvironment ( nUserId ) ' Aquire Login Token for Single Application Session(enumLOGIN_TOKEN_SESSION) = Session.SessionID Session.Timeout = enumSESSION_TIMEOUT End Sub '----------------------------------------------------------------------------------------------------------------- Private Function Authenticated ( ByRef sUserName, ByRef sUserPassword, sDBUserPassword, sDBdomain ) Dim objLoginAuth, return, sMessage sMessage = NULL Authenticated = FALSE ' Hook for testing access control features ' Any login allowed to the Test Database ' If isDevSystem() Then Authenticated = TRUE '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL ) ElseIf NOT IsNull(sDBdomain) Then ' DOMAIN auth. Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser") return = -1 return = objLoginAuth.AuthenticateUser ( sUserName, sUserPassword, sDBdomain ) ' From MSDN System Error Codes ' 0 - The operation completed successfully. ' 1326 - Logon failure: unknown user name or bad password. ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer. ' 1909 - The referenced account is currently locked out and may not be used to log on. Select Case return Case 0, 1385 'Login ok Authenticated = TRUE '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL ) Case 1909 sMessage = "Account "& sUserName &" at "& sDBdomain &" domain is currently locked!" '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) '-- Raise Exception -- Err.Raise 8, sMessage, "" Case Else sMessage = "Password is incorrect for "& sUserName &" at "& sDBdomain &" domain!" '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) '-- Raise Exception -- Err.Raise 8, sMessage, sDBdomain &" domain returns system error code "& return End Select Set objLoginAuth = Nothing Else ' LOCAL auth. If IsLocaPasswordCorrect ( sUserName, sUserPassword ) Then 'Login ok Authenticated = TRUE '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL ) Else sMessage = "Password is incorrect for "& sUserName &"!" '-- Login Trail -- Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage ) '-- Raise Exception -- Err.Raise 8, sMessage, "Please try again and make sure you do not have Caps Lock on." End If End If End Function '----------------------------------------------------------------------------------------------------------------- Private Function IsLocaPasswordCorrect ( sUserName, sPassword ) moOraDatabase.Parameters.Add "USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "PASSWORD", sPassword, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "RETURN_CODE", 0, ORAPARM_OUTPUT, ORATYPE_NUMBER moOraDatabase.ExecuteSQL _ "BEGIN :RETURN_CODE := PK_SECURITY.IS_LOCAL_PASSWORD_CORRECT ( :USER_NAME, :PASSWORD ); END;" If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 1 Then IsLocaPasswordCorrect = TRUE Else IsLocaPasswordCorrect = FALSE End If moOraDatabase.Parameters.Remove "USER_NAME" moOraDatabase.Parameters.Remove "PASSWORD" moOraDatabase.Parameters.Remove "RETURN_CODE" End Function '----------------------------------------------------------------------------------------------------------------- Public Sub SetPassword ( sUserName, sPasswordA, sPasswordB ) If (sUserName = "") OR (sPasswordA = "") OR (sPasswordB = "") Then Err.Raise 8, "Username and both Passwords are required !", "" Exit Sub End If moOraDatabase.Parameters.Add "USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "PASSWORDA", sPasswordA, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "PASSWORDB", sPasswordB, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "RETURN_CODE", 0, ORAPARM_OUTPUT, ORATYPE_NUMBER objEH.TryORA ( moOraSession ) On Error Resume Next moOraDatabase.ExecuteSQL _ "BEGIN :RETURN_CODE := PK_SECURITY.SET_PASSWORD ( :USER_NAME, :PASSWORDA, :PASSWORDB ); END;" objEH.CatchORA ( moOraSession ) If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = -1 Then Err.Raise 8, "Passwords do not match !", "Make sure that you type correctly both passwords." End If moOraDatabase.Parameters.Remove "USER_NAME" moOraDatabase.Parameters.Remove "PASSWORDA" moOraDatabase.Parameters.Remove "PASSWORDB" moOraDatabase.Parameters.Remove "RETURN_CODE" End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub LoginTrail ( nEvent, sUserName, sMessage ) moOraDatabase.Parameters.Add "EVENT_ENUM", nEvent, ORAPARM_INPUT, ORATYPE_NUMBER moOraDatabase.Parameters.Add "LOGIN_USER_NAME", sUserName, ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "CLIENT_IP", Request.ServerVariables("REMOTE_ADDR"), ORAPARM_INPUT, ORATYPE_VARCHAR2 moOraDatabase.Parameters.Add "APPLICATION_ID", APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER moOraDatabase.Parameters.Add "LOGIN_COMMENTS", sMessage, ORAPARM_INPUT, ORATYPE_VARCHAR2 objEH.TryORA ( moOraSession ) On Error Resume Next moOraDatabase.ExecuteSQL _ "BEGIN pk_AMUtils.Log_Access ( :EVENT_ENUM, :LOGIN_USER_NAME, :CLIENT_IP, :APPLICATION_ID, :LOGIN_COMMENTS ); END;" objEH.CatchORA ( moOraSession ) moOraDatabase.Parameters.Remove "EVENT_ENUM" moOraDatabase.Parameters.Remove "LOGIN_USER_NAME" moOraDatabase.Parameters.Remove "CLIENT_IP" moOraDatabase.Parameters.Remove "APPLICATION_ID" moOraDatabase.Parameters.Remove "LOGIN_COMMENTS" End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub TagLogon ( oRsQry ) oRsQry.Edit() oRsQry("is_online").Value = "Y" oRsQry("online_at").Value = Request.ServerVariables("REMOTE_ADDR") oRsQry.Update() End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub SetUserEnvironment ( nUser_id ) Dim rsUser, query, tempSTR moOraDatabase.Parameters.Add "USER_ID", nUser_id, ORAPARM_INPUT, ORATYPE_NUMBER '---- Get User Details ---- query = "SELECT usr.* FROM USERS usr WHERE usr.USER_ID = :USER_ID" Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) If (NOT rsUser.BOF) AND (NOT rsUser.EOF) Then Session(enumUSER_ID_SESSION) = rsUser("user_id") Session(enumUSER_DETAILS_SESSION) = _ "user_name="& rsUser("user_name") & sSEPARATOR &_ "full_name="& rsUser("full_name") & sSEPARATOR &_ "user_email="& rsUser("user_email") & sSEPARATOR &_ "last_visit="& rsUser("last_visit") & sSEPARATOR &_ "domain="& rsUser("domain") End If '---- Get User Applications ---- query = "SELECT ua.APP_ID FROM USER_APPLICATIONS ua WHERE ua.USER_ID = :USER_ID" Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) tempSTR = "" While (NOT rsUser.BOF) AND (NOT rsUser.EOF) tempSTR = tempSTR & sSEPARATOR & rsUser("app_id") rsUser.MoveNext() WEnd If tempSTR <> "" Then Session(enumUSER_APPLICATIONS_SESSION) = Right( tempSTR, Len(tempSTR) - Len(sSEPARATOR) ) 'Remove first separator Else Session(enumUSER_APPLICATIONS_SESSION) = 0 End If moOraDatabase.Parameters.Remove "USER_ID" rsUser.Close() Set rsUser = Nothing End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub GetApplicationRunningLevel ( ) Dim rsQry, query '--- Get if user is loged on from DB --- moOraDatabase.Parameters.Add "APP_ID", APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER query = _ " SELECT app.APP_ID,"&_ " app.APPLICATION_NAME,"&_ " app.IS_RUNNING"&_ " FROM APPLICATIONS app"&_ " WHERE app.APP_ID = :APP_ID" Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT ) If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then mbIsApplicationRunning = FALSE If rsQry("is_running") = enumDB_YES Then mbIsApplicationRunning = TRUE End If End If moOraDatabase.Parameters.Remove "APP_ID" rsQry.Close Set rsQry = Nothing End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub Class_Initialize() '// Perform action on creation of object. e.g. Set myObj = New ThisClassName Set mobjStaticControl = CreateObject("Scripting.Dictionary") Set mobjTablePermissions = CreateObject("Scripting.Dictionary") Set mobjRowPermissions = CreateObject("Scripting.Dictionary") mbIsApplicationRunning = NULL ' The state of application sSEPARATOR = "||" bDebug = false End Sub '----------------------------------------------------------------------------------------------------------------- Private Sub Class_Terminate() '// Perform action on object disposal. e.g. Set myObj = Nothing Set mobjStaticControl = Nothing Set mobjRowPermissions = Nothing Set mobjTablePermissions = Nothing End Sub '----------------------------------------------------------------------------------------------------------------- End Class %>