我繼承了asp.net
應用程序,它允許用戶訪問基於SQL Server
數據庫字段中值的頁面。在加載每個頁面時,會運行一個過程來檢查用戶標識和頁面名稱,以確定用戶標識是否可以訪問特定頁面。如果access = 'Yes'
允許用戶查看頁面上的所有元素,如果access = 'No'
用戶已註銷系統並重定向到登錄屏幕。權限訪問頁面
我需要做些什麼才能存儲用戶ID在開始時訪問的所有頁面,因此一旦用戶登錄,他們只能看到他們有權訪問的內容,而不是每個執行的檢查用戶請求訪問頁面的時間?
我繼承了asp.net
應用程序,它允許用戶訪問基於SQL Server
數據庫字段中值的頁面。在加載每個頁面時,會運行一個過程來檢查用戶標識和頁面名稱,以確定用戶標識是否可以訪問特定頁面。如果access = 'Yes'
允許用戶查看頁面上的所有元素,如果access = 'No'
用戶已註銷系統並重定向到登錄屏幕。權限訪問頁面
我需要做些什麼才能存儲用戶ID在開始時訪問的所有頁面,因此一旦用戶登錄,他們只能看到他們有權訪問的內容,而不是每個執行的檢查用戶請求訪問頁面的時間?
我會顯示一些代碼。 它是這樣的。
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
}
根據您的需要更改一些代碼。
好的,我們在用戶登錄後使用FormsAuthenticationTicket。隨着票證,我們違背數據庫,並獲得用戶的支持和支持。這進入會話變量。 (因爲您使用的是asp.net)然後,我們在Global asa中的會話中檢查針對該對象的用戶頁面請求。如果失敗,我們將它們發送到登錄頁面。
這可以保存多個值,還是隻能保存一個值?我見過的例子只顯示它存儲1個值。 – FartStopper
你可以擁有任意數量的角色。我無法想象所有80頁都有單獨的許可,他們必須分成幾個部分,每個部分都會被賦予一個角色。您可以讓框架通過緩存來處理用戶擁有 –
@ScottSelby權限的角色 - 大多數情況下,他們大約有5個組對同一頁面擁有相同權限。但是,有些情況下,某個用戶需要訪問1個頁面,該頁面不在其包含的組的默認「頁面」中。應如何處理這些實例? – FartStopper
我只有幾個級別的權限和幾個頁面來跟蹤,所以我把它們推入會話變量。話雖如此,但從數據庫中檢查單個用戶的時間並不昂貴。 – Bindrid
@Bindrid - 應用程序大約有80頁,並且打到數據庫並等待響應是我的滯後時間,因爲這個服務器也被其他多個程序使用。 – FartStopper
第一次創建用戶時,可以在表格中添加名稱的頁面。 – Hemal