Avatar billede disco_keld Nybegynder
14. juli 2003 - 09:06 Der er 1 kommentar og
1 løsning

Rolebased security fra global.asax Sub Application_Authenticate?

Hej med jer....

Jeg har lige et spm ang. og trække Boolean værdier ud, af Db og derefter tilføje brugerrettigheder alt efter om værdierne er true eller false.

I Db har jeg følgende felter:

IsAdministrator IsIntern IsEkstern IsKunde
      0            1        1        1

Jeg prøver så at lave en kontrol struktur, som skal finde de forskellige boolean værdier, men det lykkedes mig ikke:

If rd.GetBoolean(0) Then
                        roles = New String() {"Administrator", "Intern", "Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(1) Then
                        roles = New String() {"Intern", "Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(2) Then
                        roles = New String() {"Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(3) Then
                        roles = New String() {"Kunde"}
                    End If

Nogen der lige kan give en hånd?

Her er hele metoden:
------------------------------------------------------

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
        'Caster sender'n til applikationen...
        Dim app As HttpApplication = CType(sender, HttpApplication)
       
        If Not Context.User Is Nothing AndAlso Context.User.Identity.IsAuthenticated Then
            Dim cn As SqlConnection
            Dim sql As String
            Dim cm As SqlCommand
            Dim rd As SqlDataReader

            Dim id As String = Context.User.Identity.Name

            cn = New SqlConnection(ConfigurationSettings.AppSettings("Security"))
            sql = "SELECT IsAdministrator, IsIntern, IsEkstern, IsKunde FROM tblUsers WHERE UserId='{0}'"
            sql = String.Format(sql, id)
            cm = New SqlCommand(sql, cn)
            cn.Open()

            Try
                rd = cm.ExecuteReader(CommandBehavior.SingleRow Or CommandBehavior.CloseConnection)

                'hvis en record er fundet, er UserID godkendt...
                If rd.Read() Then
                    Dim ppal As GenericPrincipal
                    Dim roles As String()

                    If rd.GetBoolean(0) Then
                        roles = New String() {"Administrator", "Intern", "Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(1) Then
                        roles = New String() {"Intern", "Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(2) Then
                        roles = New String() {"Ekstern", "Kunde"}
                    ElseIf rd.GetBoolean(3) Then
                        roles = New String() {"Kunde"}
                    End If

                    ppal = New GenericPrincipal(Context.User.Identity, roles)
                    Context.User = ppal
                Else
                    'hvis UserID ikke er gyldigt, clear context...
                    Context.User = Nothing
                End If
            Catch
                Throw
            Finally
                cn.Close()
            End Try
        End If
    End Sub

-------------------------------------------------------

Mvh

/DK
Avatar billede disco_keld Nybegynder
14. juli 2003 - 15:58 #1
hmmmmm....
Avatar billede disco_keld Nybegynder
22. juli 2003 - 13:13 #2
lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester