2015-12-25 217 views
0

我繼承了asp.net應用程序,它允許用戶訪問基於SQL Server數據庫字段中值的頁面。在加載每個頁面時,會運行一個過程來檢查用戶標識和頁面名稱,以確定用戶標識是否可以訪問特定頁面。如果access = 'Yes'允許用戶查看頁面上的所有元素,如果access = 'No'用戶已註銷系統並重定向到登錄屏幕。權限訪問頁面

我需要做些什麼才能存儲用戶ID在開始時訪問的所有頁面,因此一旦用戶登錄,他們只能看到他們有權訪問的內容,而不是每個執行的檢查用戶請求訪問頁面的時間?

+0

我只有幾個級別的權限和幾個頁面來跟蹤,所以我把它們推入會話變量。話雖如此,但從數據庫中檢查單個用戶的時間並不昂貴。 – Bindrid

+0

@Bindrid - 應用程序大約有80頁,並且打到數據庫並等待響應是我的滯後時間,因爲這個服務器也被其他多個程序使用。 – FartStopper

+0

第一次創建用戶時,可以在表格中添加名稱的頁面。 – Hemal

回答

2

我會顯示一些代碼。 它是這樣的。

string session_string=""; 
SqlConnection cn = new SqlConnection(YOUR_CONNECTION_STRING); 
cn.open(); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection=cn; 
cmd.CommandType=CommandType.Text; 
cmd.CommandText="select name_of_pages from permission where username='YOUR_USERNAME'"; 
SqlDataReader rdr = cmd.ExecuteReader(); 
if(rdr.hasRows==true){ 
    while(rdr.Read()){ 
     session_string=rdr["name_of_pages"] + ",";//You need to declare this variable globally before 
     session_string=session_string + rdr["name_of_pages"] + ","; //USE THIS LINE , NOT PREVIOUS ONE 
    } 
} 
rdr.close();//DONT FORGET THIS ALSO 
cn.close();//DONT FORGET THIS 
    Session["pages"]=session_string; 
    //Now to check 
    if(Session["pages"].Contains("Index.aspx")){ 
     //PERFORM SOMETHING POSITIVE 

    } 
    else 
    { 
     //PERFORM SOMETHING NEGATIVE 
    } 

根據您的需要更改一些代碼。

0

好的,我們在用戶登錄後使用FormsAuthenticationTicket。隨着票證,我們違背數據庫,並獲得用戶的支持和支持。這進入會話變量。 (因爲您使用的是asp.net)然後,我們在Global asa中的會話中檢查針對該對象的用戶頁面請求。如果失敗,我們將它們發送到登錄頁面。

+0

這可以保存多個值,還是隻能保存一個值?我見過的例子只顯示它存儲1個值。 – FartStopper

+0

你可以擁有任意數量的角色。我無法想象所有80頁都有單獨的許可,他們必須分成幾個部分,每個部分都會被賦予一個角色。您可以讓框架通過緩存來處理用戶擁有 –

+0

@ScottSelby權限的角色 - 大多數情況下,他們大約有5個組對同一頁面擁有相同權限。但是,有些情況下,某個用戶需要訪問1個頁面,該頁面不在其包含的組的默認「頁面」中。應如何處理這些實例? – FartStopper