2013-04-02 41 views
0

使用動態數據時,有一種方法只允許用戶查看包含其名稱/ ID#的記錄。這意味着當他們過濾數據時,他們的信息只會顯示出來,而不是每個用戶。動態數據安全修整

回答

1

至於在動態數據中實現的安全性我想向你推薦一本好書由Oleg Sych發佈的ASP.NET動態數據發佈

至於你的情況,我瞭解你需要的只是List.aspx頁包含當前登錄用戶的ID或名稱記錄的GridView顯示。

讓我們考慮解決您的問題保持動態數據方法的最簡單方法。

讓我們假設,不考慮用戶如何訪問您的數據的動態網站,我們已經得到了用戶標識代碼List.aspx背後的。爲簡單起見,假設我們的表格包含用戶Id's。

List.aspx.cs(部分)

public partial class List : System.Web.UI.Page 
{ 
    protected int userId; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      userId = GetLoggedUser(); 
     }   
    } 
} 

接着就要用特殊的非可視控制的QueryExtender和使用我們把它與我們的基於LINQ的數據源控件相關聯的財產的TargetControlID(假設我們在這種情況下有EntityDataSource)。

List.aspx(部分)

<asp:GridView 
    ID="gvTest" 
    runat="server" 
    DataSourceID="DetailsDataSourceTest" 
    AllowPaging="true" 
    AllowSorting="false" 
    PageSize="10" 
    CssClass="gridview" 
    AutoGenerateColumns="false"> 
<Columns> 
    <asp:DynamicField DataField="UserId" /> 
    <asp:DynamicField DataField="Col1" /> 
    <asp:DynamicField DataField="Col2" /> 
    <asp:DynamicField DataField="Col3" /> 
</Columns> 
</asp:GridView> 
<asp:EntityDataSource 
    ID="DetailsDataSourceTest" 
    runat="server" 
    ConnectionString="name=TestEntities" 
    DefaultContainerName="TestEntities" 
    EnableFlattening="false" 
    EntitySetName="TableTestName" /> 
<asp:QueryExtender 
    ID="QueryExtenderTest" 
    runat="server" 
    TargetControlID="DetailsDataSourceTest"> 
<asp:CustomExpression OnQuerying="QueryExtenderTest_Querying" /> 
</asp:QueryExtender> 

正如你可以看到,我們使用CustomExpression的QueryExtender控制的選項,然後我們設置其OnQuerying屬性QueryExtenderTest_Querying。這將允許我們執行我們的定製 LINQ查詢。

List.aspx.cs(部分地)

protected void QueryExtenderTest_Querying(object sender, System.Web.UI.WebControls.Expressions.CustomExpressionEventArgs e) 
{ 
    if (/* check userId if you would like */) 
    { 
     e.Query = (from c in e.Query.Cast<TableTestName>() 
        where (c.UserId == userId) 
        select c); 
    } 
} 

更多信息:

Walkthrough: Filtering Data in a Web Page Using Declarative Syntax

編輯:

基於它簡單的解決方案,並且根據在您的動態數據網站中實施路由喲你應該在Details.aspx頁面和Edit.aspx頁面上使用自定義的LINQ,以便用戶無法通過查詢字符串訪問自己的記錄。