2012-12-19 3 views
1

OK, 나는이 사이트뿐만 아니라 다른 사람들이 아무 소용이없는 대답을 찾고 있는지 조사했습니다.특정 페이지에 대한 액세스를 제한하는 데 실패하고 있습니다. 어떤 아이디어?

새로운 웹 사이트에는 모든 구성원이이 관리 섹션 내의 특정 페이지에 액세스 할 수있는 관리 섹션이 있습니다.

그러나 모든 페이지에 대해 3 개의 액세스 만 허용됩니다.

로그인 페이지를 사용하여 관심 항목 메뉴가있는 관리 섹션으로 모든 사용자를 얻으려고합니다.

우리의 목표는 사용자가이 섹션으로 이동하여 볼 수있는 권한이없는 항목을 클릭하면 환영 페이지로 리디렉션된다는 것입니다.

물론 "이 페이지를 볼 수있는 권한이 없습니다."라는 메시지가 더 좋은 옵션입니다.

이 작업을 돕기 위해 수정할 수있는 링크 또는 샘플 코드가 있습니까?

아래 코드는 작동하지 않습니다.

관리자 섹션으로 안내합니다. 모든 링크의 page_load 이벤트에 대해 세션을 사용하여 사용자를 제한하려고 시도합니다.

예 : 만약 진정한 세션 ("관리자") <> 다음 Response.Redirect를 ("home.aspx") 최종면

만에 나열된 링크 중 하나를 볼에서 사람을 제한하지 않습니다 화면.

Sub CmdLogin_Click(ByVal Sender As Object, ByVal E As EventArgs) Handles CmdLogin.Click 

    Dim StrUser As String, StrPass As String 
    Dim BValid As Boolean 
    Dim Conn As OleDbConnection 
    Dim Cmd As OleDbCommand 
    Dim rs As OleDbDataReader 
    Dim StrSQL As String 

    ' We will request all variables from our form with this. 
    'Protect against SQL Injection 
    StrUser = Replace(txtUser.Text, "'", "''", 1, -1, 1) 
    StrPass = Replace(txtPass.Text, "'", "''", 1, -1, 1) 

    ' This is our boolean variable for validation purposes set to true if valid user 
    BValid = False 

    ' Initialize Database Connection 
    Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("App_Data\Members.mdb")) 
    ' Create Select Command 
    StrSQL = "SELECT Access_Level, myEmail,UserPassword FROM tblUsers WHERE myEmail='" & StrUser & "' AND UserPassword = '" & StrPass & "'" 
    'Response.Write(StrSQL) 
    'Response.End() 
    Cmd = New OleDbCommand(StrSQL, Conn) 

    Conn.Open() 

    rs = Cmd.ExecuteReader() 

    ' This acts like the (Not RecordSource.Eof) in ASP 3.0 
    While rs.Read() 
     If rs("Access_Level") = "1" Or rs("Access_Level") = "2" Then 
      Session("Admin") = True 
      Response.Redirect("admin.aspx") 
      'Response.Write(StrPass) 
      'Response.End() 
      Dim redirectTo As String = Trim(Session("RedirectTo")) 
      BValid = True 
     Else 
     End If 
    End While 

    ' Don't forget this 
    Conn.Close() 

    ' This handles all response per validation 
    ' If validated it goes to admin.aspx page 
    If BValid = True Then 
     Session("userid") = StrUser 
     Dim redirectTo As String = Trim(Session("RedirectTo")) 
     If redirectTo <> "" Then 
      Response.Redirect(redirectTo) 
     Else 'They just got in without trying to go to a restricted page 
      Response.Redirect("admin.aspx") 
     End If 
    ElseIf BValid = False Then 
     lblError.Text = "Login failed: Please try again." 
    End If 
    End Sub 

모든 도움을 주실 수 있습니다.

답변

1

여기에서하려고하는 체조가 필요하지 않습니다. 멤버십, 역할 및 빌드 .net 기능을 사용하여 특정 폴더/페이지에 대한 액세스를 제한하십시오.

이가 쉽게 할 수있는 방법을 내 게시물 중 하나에서 봐 주시기 바랍니다 :

How to restrict unlogged unauthorized users from viewing web pages

+0

을 그냥 그래서 내가 7에서 .aspx 페이지가 있다고 가정 엉망이 최대하지 않으며, I 해당 페이지 중 3 개에 대한 액세스 권한을 다시 부여하려는 경우, 폴더 2 개를 만들고 관리자 한 명과 다른 사용자 한 명을 호출 한 다음 제한된 페이지를 관리자 폴더에 넣고 사용자 폴더에 저장해야합니까? 둘째, 역할을 사용하려면 SQL Server 데이터베이스를 사용해야합니까? 우리는 Access 데이터베이스를 사용하고 있습니다. 죄송합니다. 이전에는 역할을 사용하지 않았습니다. 감사합니다. –

+0

첫 번째 답변 : 예, 좋은 사례 일 것입니다. 두 번째 대답 : SQL Server를 사용할 필요가 없지만 인생을 훨씬 쉽게 만들어줍니다. Access DB에 머무를 수 있습니다.이 주제에 대한 좋은 링크는 다음과 같습니다. http://imar.spaanjaars.com/404/using-the-microsoft-access-providers-to-replace-the-built-in-sql- server-providers 그러나 장기간 SQL Server로 마이그레이션하는 것이 좋습니다. 성능을 포함하여 많은 이점을 누릴 수 있습니다. –

+0

@Grgor, 좋은 물건! 대단히 감사합니다. –

관련 문제