共用方式為


根據使用者限制資料修改功能 (VB)

斯科特·米切爾

下載 PDF

在允許使用者編輯數據的 Web 應用程式中,不同的用戶帳戶可能會有不同的資料編輯許可權。 在本教學課程中,我們將探討如何根據來訪的使用者動態調整數據修改功能。

簡介

許多 Web 應用程式支援使用者帳戶,並根據登入的使用者提供不同的選項、報告和功能。 例如,透過我們的教學課程,我們可能會想要允許供應商公司的使用者登入網站,並更新其產品的一般資訊 -- 其每個單位的名稱和數量,以及供應商資訊,例如其公司名稱、位址、聯繫人資訊等等。 此外,我們可能想要包含公司人員的某些用戶帳戶,以便他們可以登入並更新產品資訊,例如庫存單位、重新排序層級等等。 我們的 Web 應用程式也可能允許匿名用戶流覽(尚未登入的人員),但會限制他們只檢視數據。 有了這類使用者帳戶系統,我們希望 ASP.NET 頁面中的數據 Web 控件提供適用於目前登入使用者的插入、編輯和刪除功能。

在本教學課程中,我們將探討如何根據來訪的使用者動態調整數據修改功能。 特別是,我們將建立一個頁面,在可編輯的 DetailsView 中顯示供應商資訊,並透過 GridView 列出供應商提供的產品。 如果瀏覽頁面的使用者來自我們公司,他們可以:檢視任何供應商的資訊:編輯其位址;並編輯供應商提供之任何產品的資訊。 不過,如果使用者來自特定公司,他們只能檢視和編輯自己的地址資訊,而且只能編輯尚未標示為已中止的產品。

來自我們公司的使用者可以編輯任何供應商的資訊

圖 1:我們公司的使用者可以編輯任何供應商的資訊(按兩下以檢視完整大小的影像

來自特定供應商的使用者只能檢視和編輯其資訊

圖 2:來自特定供應商的使用者只能檢視及編輯其資訊(按兩下以檢視完整大小的影像

讓我們開始吧!

備註

ASP.NET 2.0 s 成員資格系統提供標準化、可延伸的平臺,可用來建立、管理及驗證用戶帳戶。 由於檢查成員資格系統超出了這些教學課程的範圍,因此本教學課程透過允許匿名訪客選擇自己是某特定供應商還是我們公司的成員,來「模擬」成員資格。 如需更多關於會員資格的資訊,請參閱 探討 ASP.NET 2.0 的會員資格、角色和配置檔 文章系列。

步驟 1:允許使用者指定其訪問許可權

在真實世界的 Web 應用程式中,用戶帳戶資訊會包括他們為公司或特定供應商工作,而且一旦使用者登入網站,就可以以程式設計方式從我們的 ASP.NET 頁面存取此資訊。 此資訊可透過 ASP.NET 2.0 的角色系統擷取,使用者層級的帳戶資訊可透過設定檔系統擷取,或透過某些自定義方式擷取。

由於本教學課程的目的是要示範根據登入的使用者調整數據修改功能,而且並不是要展示 ASP.NET 2.0 s 成員資格、角色和配置文件系統,因此我們將使用非常簡單的機制來判斷瀏覽頁面的使用者功能 - DropDownList,使用者可以從中指出他們是否應該能夠檢視和編輯任何供應商資訊,或 或者,他們可以檢視和編輯的特定供應商資訊。 如果使用者指出她可以檢視和編輯所有供應商資訊(預設值),她可以逐頁流覽所有供應商、編輯任何供應商的地址資訊,以及編輯所選供應商供應商提供之任何產品的每個單位名稱和數量。 如果使用者指出她只能檢視和編輯特定供應商,則她只能檢視該一個供應商的詳細數據和產品,而且只能更新 中止之產品的每個單位資訊的名稱和數量。

接著,在本教學課程的第一個步驟是建立此DropDownList,並在系統中填入供應商。 在UserLevelAccess.aspx資料夾中開啟EditInsertDelete頁面,新增一個DropDownList,將ID屬性設定為Suppliers,並將這個DropDownList繫結至名為AllSuppliersDataSource的新ObjectDataSource。

建立名為 AllSuppliersDataSource 的新 ObjectDataSource

圖 3:建立名為 AllSuppliersDataSource 的新 ObjectDataSource (按兩下以檢視完整大小的影像

由於我們希望此 DropDownList 包含所有供應商,請將 ObjectDataSource 設定為以呼叫SuppliersBLL類別的GetSuppliers()方法。 此外,也請確定 ObjectDataSource s Update() 方法會對應至 SuppliersBLL 類別 s UpdateSupplierAddress 方法,因為 DetailsView 也會使用此 ObjectDataSource,我們將在步驟 2 中新增。

完成 ObjectDataSource 精靈之後,請設定 Suppliers DropDownList來完成步驟,使其顯示 CompanyName 數據欄位,並使用 SupplierID 數據欄位作為每個 ListItem的值。

將供應商 DropDownList 設定為使用 CompanyName 和 SupplierID 數據字段

圖 4:設定 Suppliers DropDownList 以使用 CompanyNameSupplierID 數據欄位 (按兩下以檢視完整大小的影像

此時,DropDownList 會列出資料庫中供應商的公司名稱。 不過,我們也需要在DropDownList中包含 [顯示/編輯所有供應商] 選項。 若要達成此目的,請將 Suppliers DropDownList 的 AppendDataBoundItems 屬性設定為 true,然後新增一個 ListItem,其 Text 屬性為 “Show/Edit ALL Suppliers”,其值為 -1。 這可以直接透過宣告式標記或從設計工具新增,方法是從 [屬性] 視窗中點擊 DropDownList 的 Items 屬性中的省略號。

備註

若要了解如何將 Select All 項目新增至數據繫結的下拉式清單的詳細內容,請參閱 使用下拉式清單進行主/細節篩選 教學課程。

在設定 AppendDataBoundItems 屬性並新增 ListItem 後,DropDownList 的宣告式標記看起來應該像這樣:

<asp:DropDownList ID="Suppliers" runat="server" AppendDataBoundItems="True"
    DataSourceID="AllSuppliersDataSource" DataTextField="CompanyName"
    DataValueField="SupplierID">
    <asp:ListItem Value="-1">Show/Edit ALL Suppliers</asp:ListItem>
</asp:DropDownList>

圖 5 顯示透過瀏覽器檢視時,目前進度的螢幕快照。

供應商下拉清單包含一個顯示全部的項目,及每一個供應商的項目

圖 5Suppliers 下拉選單包含顯示全部的選項,還有每個供應商的選項 (ListItem

由於我們想要在使用者變更其選取範圍之後立即更新使用者介面,請將DropDownList 的 Suppliers 屬性設定AutoPostBacktrue。 在步驟 2 中,我們將建立 DetailsView 控件,以根據 DropDownList 選取項目顯示供貨商的資訊。 然後,在步驟 3 中,我們將為此 SelectedIndexChanged DropDownList 事件建立事件處理程序,並在其中添加程式碼,以根據選取的供貨商,將適當的供貨商資訊綁定至 DetailsView。

步驟 2:新增 DetailsView 控件

讓我們使用DetailsView來顯示供貨商資訊。 對於可檢視和編輯所有供應商的使用者,DetailsView 將支援分頁,讓使用者一次逐一查看供應商資訊。 不過,如果使用者針對特定供應商運作,DetailsView 只會顯示該特定供應商的資訊,而且不會包含分頁介面。 不論是哪一種情況,DetailsView 都必須允許使用者編輯供應商的位址、城市和國家/地區字段。

將 DetailsView 新增至 DropDownList 下方 Suppliers 的頁面、將其 ID 屬性設定為 SupplierDetails,並將它系結至在上一個步驟中建立的 AllSuppliersDataSource ObjectDataSource。 接下來,核取 DetailsView 智慧標記中的 [啟用分頁] 和 [啟用編輯] 複選框。

備註

如果您未在 DetailsView 智慧標記中看到 [啟用編輯] 選項,是因為您未將 ObjectDataSource s Update() 方法對應至 SuppliersBLL 類別 s UpdateSupplierAddress 方法。 請花點時間返回並進行此組態變更,之後[啟用編輯] 選項應該會出現在 DetailsView 的智慧標記中。

SuppliersBLL因為 類別的 UpdateSupplierAddress 方法只接受四個參數 - supplierIDaddresscity、 和 country - 修改 DetailsView 的 BoundFields,將 CompanyNamePhone BoundFields 設為唯讀。 此外,請徹底移除SupplierID 的 BoundField。 最後, AllSuppliersDataSource ObjectDataSource 目前其 OldValuesParameterFormatString 屬性設定為 original_{0}。 請花點時間從宣告式語法中移除這個屬性設定,或將它設定為預設值 {0}

設定 SupplierDetails DetailsView 和 AllSuppliersDataSource ObjectDataSource 之後,我們將具有下列宣告式標記:

<asp:ObjectDataSource ID="AllSuppliersDataSource" runat="server"
    SelectMethod="GetSuppliers" TypeName="SuppliersBLL"
    UpdateMethod="UpdateSupplierAddress">
    <UpdateParameters>
        <asp:Parameter Name="supplierID" Type="Int32" />
        <asp:Parameter Name="address" Type="String" />
        <asp:Parameter Name="city" Type="String" />
        <asp:Parameter Name="country" Type="String" />
    </UpdateParameters>
</asp:ObjectDataSource>
<asp:DetailsView ID="SupplierDetails" runat="server" AllowPaging="True"
    AutoGenerateRows="False" DataKeyNames="SupplierID"
    DataSourceID="AllSuppliersDataSource">
    <Fields>
        <asp:BoundField DataField="CompanyName" HeaderText="Company"
            ReadOnly="True" SortExpression="CompanyName" />
        <asp:BoundField DataField="Address" HeaderText="Address"
            SortExpression="Address" />
        <asp:BoundField DataField="City" HeaderText="City"
            SortExpression="City" />
        <asp:BoundField DataField="Country" HeaderText="Country"
            SortExpression="Country" />
        <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True"
            SortExpression="Phone" />
        <asp:CommandField ShowEditButton="True" />
    </Fields>
</asp:DetailsView>

此時,DetailsView 可以逐頁查看,而且不論DropDownList中 Suppliers 所做的選取項目為何,都可以更新選取的供貨商地址資訊(請參閱圖 6)。

任何供應商資訊都可以檢視,並更新其位址

圖 6:可檢視任何供應商資訊及其位址已更新 (按兩下以檢視完整大小的影像

步驟 3:只顯示選取的供應商資訊

我們的頁面目前會顯示所有供應商的資訊,不論特定供應商是否已從 Suppliers DropDownList 中選取。 為了只顯示所選供貨商的供應商資訊,我們需要將另一個 ObjectDataSource 新增至頁面,其中一個會擷取特定供應商的相關信息。

將新的 ObjectDataSource 新增至頁面,並將它命名為 SingleSupplierDataSource。 從其智慧標記中,按兩下 [設定資料源] 連結,並讓它使用 SuppliersBLL 類別 s GetSupplierBySupplierID(supplierID) 方法。 如同 AllSuppliersDataSource ObjectDataSource,讓 SingleSupplierDataSource ObjectDataSource 的 Update() 方法對應至 SuppliersBLL 類別的 UpdateSupplierAddress 方法。

將 SingleSupplierDataSource ObjectDataSource 設定為使用 GetSupplierBySupplierID(supplierID) 方法

圖 7:將 SingleSupplierDataSource ObjectDataSource 設定為使用 GetSupplierBySupplierID(supplierID) 方法 (按兩下即可檢視完整大小的影像

接下來,我們會提示您指定GetSupplierBySupplierID(supplierID)方法的supplierID輸入參數的參數來源。 由於我們想要顯示從DropDownList選取之供貨商的資訊,請使用 Suppliers DropDownList s SelectedValue 屬性作為參數來源。

使用供應商 DropDownList 作為 supplierID 參數來源

圖 8:使用 Suppliers DropDownList 作為 supplierID 參數來源 (按兩下以檢視完整大小的影像

即使新增了第二個 ObjectDataSource,DetailsView 控件目前仍設定為一律使用 AllSuppliersDataSource ObjectDataSource。 我們需要根據選取的DropDownList專案,新增邏輯來調整DetailsView Suppliers 所使用的數據源。 若要達成此目的,請建立 SelectedIndexChanged 供應商 DropDownList 的事件處理程式。 按兩下設計工具中的DropDownList,即可更輕鬆地建立此專案。 此事件處理程式必須判斷要使用的數據源,而且必須將數據重新系結至 DetailsView。 這是透過以下程式碼完成的:

Protected Sub Suppliers_SelectedIndexChanged _
    (ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Suppliers.SelectedIndexChanged
    If Suppliers.SelectedValue = "-1" Then
        ' The "Show/Edit ALL" option has been selected
        SupplierDetails.DataSourceID = "AllSuppliersDataSource"
        ' Reset the page index to show the first record
        SupplierDetails.PageIndex = 0
    Else
        ' The user picked a particular supplier
        SupplierDetails.DataSourceID = "SingleSupplierDataSource"
    End If
    ' Ensure that the DetailsView and GridView are in read-only mode
    SupplierDetails.ChangeMode(DetailsViewMode.ReadOnly)
    ' Need to "refresh" the DetailsView
    SupplierDetails.DataBind()
End Sub

事件處理程式會從判斷是否已選取 [顯示/編輯所有供應商] 選項開始。 如果是,它會將 SupplierDetails DetailsView 的 DataSourceID 設定為 AllSuppliersDataSource,並將 PageIndex 屬性設定為 0,然後將使用者返回到供應商集合中的第一筆記錄。 不過,如果使用者已從DropDownList 選取特定供應商,則DetailsView s DataSourceID 會指派給 SingleSuppliersDataSource。 不論使用何種數據源, SuppliersDetails 模式都會還原回只讀模式,而數據會透過呼叫 SuppliersDetails 控件的方法 DataBind() ,重新系結至 DetailsView。

有了這個事件處理程式,DetailsView 控件現在會顯示選取的供應商,除非已選取 [顯示/編輯所有供應商] 選項,在此情況下,所有供應商都可以透過分頁介面來檢視。 圖 9 顯示已選取 [顯示/編輯所有供應商] 選項的頁面;請注意,分頁介面存在,可讓用戶流覽及更新任何供應商。 圖 10 顯示已選取 Ma Maison 供應商的頁面。 在此情況下,只能查看和編輯 Ma Maison 的信息。

所有供應商資訊都可以檢視和編輯

圖 9:所有供應商資訊都可以檢視和編輯(按兩下以檢視完整大小的影像

只能檢視和編輯選取的供貨商資訊

圖 10:只能檢視和編輯選取的供應商資訊(按兩下以檢視完整大小的影像

備註

在本教學課程中,DropDownList 和 DetailsView 控件 EnableViewState 都必須設定為 true (預設值),因為 DropDownList s SelectedIndex 和 DetailsView 屬性的 DataSourceID 變更必須跨回傳記住。

步驟 4:列出可編輯 GridView 中的供應商產品

完成DetailsView之後,下一個步驟是包含可編輯的 GridView,其中列出所選供應商所提供的產品。 此 GridView 應該只允許編輯 ProductNameQuantityPerUnit 欄位。 此外,如果瀏覽頁面的使用者來自特定供應商,它應該只允許更新 停止的產品。 若要達成此目的,我們必須先在ProductsBLL類別的UpdateProducts方法新增一個重載,此重載只接受ProductIDProductNameQuantityPerUnit欄位作為輸入。 我們已在許多教程中逐步講解過此過程,因此讓我們看看這裡的程式代碼,這應新增至 ProductsBLL

<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Update, False)> _
Public Function UpdateProduct(ByVal productName As String, _
    ByVal quantityPerUnit As String, ByVal productID As Integer) As Boolean
    Dim products As Northwind.ProductsDataTable = Adapter.GetProductByProductID(productID)
    If products.Count = 0 Then
        ' no matching record found, return false
        Return False
    End If
    Dim product As Northwind.ProductsRow = products(0)
    product.ProductName = productName
    If quantityPerUnit Is Nothing Then
        product.SetQuantityPerUnitNull()
    Else
        product.QuantityPerUnit = quantityPerUnit
    End If
    ' Update the product record
    Dim rowsAffected As Integer = Adapter.Update(product)
    ' Return true if precisely one row was updated, otherwise false
    Return rowsAffected = 1
End Function

建立此多載之後,我們即可新增 GridView 控件及其相關聯的 ObjectDataSource。 將新的 GridView 新增至頁面、將其 ID 屬性設定為 ProductsBySupplier,並將其設定為使用名為 ProductsBySupplierDataSource的新 ObjectDataSource。 由於我們希望此 GridView 依選取的供應商列出這些產品,請使用 ProductsBLL 類別 s GetProductsBySupplierID(supplierID) 方法。 此外,將 Update() 方法對應至我們剛才建立的新 UpdateProduct 多載。

將 ObjectDataSource 設定為使用新建立的 UpdateProduct 重載

圖 11:將 ObjectDataSource 設定為使用剛建立的多載(UpdateProduct

系統提示我們選擇GetProductsBySupplierID(supplierID)方法的supplierID輸入參數來源。 由於我們想要顯示 DetailsView 中所選取供應商的產品,因此請使用 SuppliersDetails DetailsView 控制件的 SelectedValue 屬性作為參數來源。

使用 SuppliersDetails DetailsView s SelectedValue 屬性作為參數來源

圖 12:使用 SuppliersDetails DetailsView s SelectedValue 屬性作為參數來源 (按兩下以檢視完整大小的影像

返回 GridView,移除 、ProductName、 和 QuantityPerUnit以外的Discontinued所有 GridView 欄位,將 Discontinued CheckBoxField 標示為唯讀。 此外,請檢查 GridView 智慧標記中的 [啟用編輯] 選項。 進行這些變更之後,GridView 和 ObjectDataSource 的宣告式標記看起來應該如下所示:

<asp:GridView ID="ProductsBySupplier" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ProductsBySupplierDataSource">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:BoundField DataField="ProductName" HeaderText="Product"
            SortExpression="ProductName" />
        <asp:BoundField DataField="QuantityPerUnit" HeaderText="Qty/Unit"
            SortExpression="QuantityPerUnit" />
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
            ReadOnly="True" SortExpression="Discontinued" />
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsBySupplierDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
    SelectMethod="GetProductsBySupplierID" UpdateMethod="UpdateProduct">
    <UpdateParameters>
        <asp:Parameter Name="productName" Type="String" />
        <asp:Parameter Name="quantityPerUnit" Type="String" />
        <asp:Parameter Name="productID" Type="Int32" />
    </UpdateParameters>
    <SelectParameters>
        <asp:ControlParameter ControlID="SupplierDetails" Name="supplierID"
            PropertyName="SelectedValue" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

如同先前的 ObjectDataSources,這個屬性 OldValuesParameterFormatString 會設定為 original_{0},這會在嘗試更新每個單位的產品名稱或數量時造成問題。 請從宣告式語法中移除這個屬性,或將其設定為預設值 {0}

完成此組態之後,我們的頁面現在會列出 GridView 中所選取供應商所提供的產品(請參閱圖 13)。 目前 任何產品的名稱或每個單位的數量 都可以更新。 不過,我們需要更新頁面邏輯,以禁止與特定供應商相關的使用者在已停產的產品上使用此類功能。 我們將在步驟 5 中處理這最後一部分。

所選取供應商所提供的產品隨即顯示

圖 13:顯示所選供貨商所提供的產品(按兩下以檢視全尺寸影像

備註

新增此可編輯的 GridView 時, Suppliers 應該更新 DropDownList 的 SelectedIndexChanged 事件處理程式,以將 GridView 傳回唯讀狀態。 否則,如果在編輯產品資訊中間選取不同的供應商,新供應商的 GridView 中對應的索引也可以編輯。 若要避免這種情況,只要在事件處理程式中將 GridView s EditIndex 屬性設定為 -1SelectedIndexChanged

此外,請記住,必須啟用 GridView 的檢視狀態(預設行為)。 如果您將 GridView 的 EnableViewState 屬性設定為 false,您就會有不小心刪除或編輯記錄的並行用戶風險。

步驟 5:在未選取 [顯示/編輯所有供應商] 時,不允許編輯已停止銷售的產品。

ProductsBySupplier雖然 GridView 功能完全正常,但它目前會授與來自特定供應商的使用者太多存取權。 根據我們的商務規則,這類使用者不應該能夠更新已停止的產品。 若要強制執行此動作,我們可以隱藏(或停用)這些 GridView 數據列中的 [編輯] 按鈕,當供應商的使用者瀏覽頁面時,該按鈕將被隱藏。

建立 GridView 事件 RowDataBound 事件處理程式。 在此事件處理程式中,我們需要判斷使用者是否與特定供應商相關聯。對於本教學課程,可以透過檢查供應商 DropDownList s SelectedValue 屬性來確定:若屬性值不是 -1 則表示使用者已與某個特定供應商相關聯。 對於這類使用者,我們接著需要判斷產品是否停止。 我們可以透過 ProductRow 屬性擷取系結至 GridView 數據列之實際e.Row.DataItem實例的參考,如在 GridView 的 Footer 教學課程中顯示摘要資訊中所述。 如果產品已停止,我們可以使用上一個教學課程中討論的技術,擷取 GridView s CommandField 中 [編輯] 按鈕的程式設計參考: 新增刪除時 Client-Side 確認。 一旦我們有了參考點,就可以隱藏或停用該按鈕。

Protected Sub ProductsBySupplier_RowDataBound _
    (ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles ProductsBySupplier.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' Is this a supplier-specific user?
        If Suppliers.SelectedValue <> "-1" Then
            ' Get a reference to the ProductRow
            Dim product As Northwind.ProductsRow = _
                CType(CType(e.Row.DataItem, System.Data.DataRowView).Row, _
                Northwind.ProductsRow)
            ' Is this product discontinued?
            If product.Discontinued Then
                ' Get a reference to the Edit LinkButton
                Dim editButton As LinkButton = _
                    CType(e.Row.Cells(0).Controls(0), LinkButton)
                ' Hide the Edit button
                editButton.Visible = False
            End If
        End If
    End If
End Sub

有了此事件處理程式,當以特定供應商的使用者身分瀏覽此頁面時,已停止的產品將無法編輯,因為這些產品的 [編輯] 按鈕會隱藏。 例如,Chef Anton s Gumbo Mix 是新奧爾良卡瓊喜悅供應商已停產的產品。 流覽此特定供應商的頁面時,此產品的 [編輯] 按鈕會隱藏在視線中(請參閱圖 14)。 不過,使用 [顯示/編輯所有供應商] 瀏覽時,可以使用 [編輯] 按鈕(請參閱圖 15)。

對於 Supplier-Specific 使用者,Chef Anton s Gumbo Mix 的編輯按鈕已隱藏

圖 14:對於 Supplier-Specific 使用者,Chef Anton s Gumbo Mix 的編輯按鈕是隱藏的 (按兩下以檢視完整大小的影像

針對顯示/編輯所有供應商使用者,會顯示 Chef Anton s Gumbo Mix 的 [編輯] 按鈕

圖 15:針對顯示/編輯所有供應商使用者,會顯示 Chef Anton s Gumbo Mix 的編輯按鈕 (按兩下以檢視全尺寸影像

檢查業務邏輯層中的存取權限

在本教學課程中,ASP.NET 頁面會處理使用者可以看到哪些資訊以及他可更新哪些產品的所有邏輯。 在理想情況下,此邏輯也會出現在商業規則層。 例如, SuppliersBLL 類別 s GetSuppliers() 方法(傳回所有供應商)可能包含檢查,以確保目前登入的使用者 與特定供應商相關聯。 同樣地,方法 UpdateSupplierAddress 可以包含檢查,以確保目前登入的使用者為公司工作(因此可以更新所有供應商地址資訊),或與正在更新數據的供應商相關聯。

我未在此包含這類 BLL 層檢查,因為在教學課程中,用戶的許可權是由頁面上的DropDownList所決定,BLL 類別無法存取。 當使用成員資格系統或 ASP.NET 所提供的其中一個現成的驗證方案時,目前登入的使用者資訊和角色資訊可以從 BLL 取得,這樣一來,可以在呈現層和 BLL 層進行存取權限檢查。

總結

大部分提供用戶帳戶的網站都需要根據登入的使用者自定義數據修改介面。 系統管理使用者可以刪除和編輯任何記錄,而非系統管理使用者可能僅限於更新或刪除自己建立的記錄。 無論案例為何,都可以擴充數據 Web 控件、ObjectDataSource 和 Business Logic Layer 類別,以根據登入的使用者新增或拒絕特定功能。 在本教學課程中,我們根據使用者是否與特定供應商相關聯,或是否為公司工作,瞭解如何限制可檢視和可編輯的數據。

本教學課程最後會使用 GridView、DetailsView 和 FormView 控件來檢查插入、更新和刪除數據。 從下一個教學內容開始,我們會專注於新增分頁和排序支援。

快樂的程序設計!

關於作者

斯科特·米切爾,七本 ASP/ASP.NET 書籍和 4GuysFromRolla.com 創始人的作者,自1998年以來一直與Microsoft Web 技術合作。 斯科特擔任獨立顧問、教練和作家。 他的最新書是 Sams Teach Yourself ASP.NET 2.0 in 24 Hours。 可以透過 mitchell@4GuysFromRolla.com 聯絡他。