ユーザーに基づいてデータ編集機能を制限する (VB)
ユーザーがデータを編集できる Web アプリケーションでは、異なるユーザー アカウントに異なるデータ編集権限が付与される場合があります。 このチュートリアルでは、アクセスするユーザーに基づいてデータ変更機能を動的に調整する方法について説明します。
はじめに
多数の Web アプリケーションがユーザー アカウントをサポートし、ログインしているユーザーに基づいてさまざまなオプション、レポート、機能を提供します。 たとえば、このチュートリアルでは、サプライヤー企業のユーザーがサイトにログオンし、製品に関する一般的な情報 (単位あたりの名前と数量など) を、会社名、住所、連絡先の情報などのサプライヤー情報と共に更新できるようにする場合があります。 さらに、在庫の単位、並べ替えレベルなどの製品情報にログオンして更新できるように、会社のユーザーアカウントを含めることができます。 また、Web アプリケーションでは、匿名ユーザー (ログオンしていないユーザー) へのアクセスが許可される場合がありますが、データの表示のみに制限されます。 このようなユーザー アカウント システムを用意すると、ASP.NET ページのデータ Web コントロールで、現在ログオンしているユーザーに適した挿入、編集、および削除機能を提供する必要があります。
このチュートリアルでは、アクセスするユーザーに基づいてデータ変更機能を動的に調整する方法について説明します。 特に、編集可能な DetailsView にサプライヤー情報を表示するページと、サプライヤーが提供する製品を一覧表示する GridView を作成します。 ページにアクセスするユーザーが当社のユーザーである場合は、サプライヤーの情報を表示できます。アドレスを編集する。サプライヤーが提供する製品の情報を編集します。 ただし、ユーザーが特定の会社の場合、ユーザーは自分の住所情報のみを表示および編集でき、廃止済みとしてマークされていない製品のみを編集できます。
図 1: 当社のユーザーは、任意のサプライヤーの情報を編集できます (クリックするとフルサイズの画像が表示されます)
図 2: 特定のサプライヤーのユーザーは、その情報のみを表示および編集できます (クリックするとフルサイズの画像が表示されます)
始めましょう。
注意
ASP.NET 2.0 のメンバーシップ システムは、ユーザー アカウントを作成、管理、検証するための標準化された拡張可能なプラットフォームを提供します。 メンバーシップシステムの検査はこれらのチュートリアルの範囲を超えているので、匿名の訪問者が特定のサプライヤーからのものか、会社からのものかを選択できるようにすることで、このチュートリアルは代わりにメンバーシップを「偽物」にします。 メンバーシップの詳細については、 2.0 s メンバーシップ、ロール、およびプロファイルに関する記事 シリーズ ASP.NET 調べる を参照してください。
手順 1: ユーザーにアクセス権の指定を許可する
実際の Web アプリケーションでは、ユーザーのアカウント情報には、会社または特定のサプライヤーで働いていたかどうかが含まれます。この情報は、ユーザーがサイトにログオンした後、ASP.NET ページからプログラムでアクセスできます。 この情報は、ASP.NET 2.0 のロール システム、プロファイル システムを介したユーザー レベルのアカウント情報、または何らかのカスタム手段によってキャプチャできます。
このチュートリアルの目的は、ログオンしているユーザーに基づいてデータ変更機能を調整する方法を示し、2.0 秒のメンバーシップ、ロール、プロファイル システム ASP.NET 示すものではありませんので、非常に単純なメカニズムを使用して、ページにアクセスするユーザーの機能 (ユーザーがサプライヤー情報を表示および編集できるかどうかを示すことができる DropDownList) を決定します。 または、特定のサプライヤーの情報を表示および編集できます。 すべての仕入先情報 (既定値) を表示および編集できることをユーザーが示した場合は、すべての仕入先をページングし、サプライヤーの住所情報を編集し、選択した仕入先によって提供されるすべての製品の単位あたりの名前と数量を編集できます。 ただし、ユーザーが特定の仕入先のみを表示および編集できることを示した場合、その 1 つの仕入先の詳細と製品のみを表示でき、廃止 されていない 製品の単位情報ごとの名前と数量のみを更新できます。
このチュートリアルの最初の手順は、この DropDownList を作成し、システム内のサプライヤーに設定することです。 フォルダー内のページをUserLevelAccess.aspx
EditInsertDelete
開き、 プロパティが に設定されている DropDownList ID
をSuppliers
追加し、この DropDownList を という名前AllSuppliersDataSource
の新しい ObjectDataSource にバインドします。
図 3: 名前付きの AllSuppliersDataSource
新しい ObjectDataSource を作成する (クリックするとフルサイズの画像が表示されます)
この DropDownList にすべてのサプライヤーを含める必要があるため、クラスの GetSuppliers()
メソッドを呼び出すように ObjectDataSource をSuppliersBLL
構成します。 また、この ObjectDataSource Update()
は、手順 2 で追加する SuppliersBLL
DetailsView でも使用されるため、ObjectDataSource の メソッドがクラスの UpdateSupplierAddress
メソッドにマップされていることを確認します。
ObjectDataSource ウィザードを完了したら、DropDownList を構成Suppliers
して、データ フィールドを表示CompanyName
し、各 ListItem
の値としてデータ フィールドをSupplierID
使用するように手順を完了します。
図 4: および データ フィールドをSuppliers
使用CompanyName
SupplierID
するように DropDownList を構成する (クリックするとフルサイズの画像が表示されます)
この時点で、DropDownList には、データベース内の仕入先の会社名が一覧表示されます。 ただし、DropDownList には "すべての仕入先の表示/編集" オプションも含める必要があります。 これを行うには、DropDownList の AppendDataBoundItems
プロパティを にtrue
設定Suppliers
し、プロパティText
が "Show/Edit ALL Suppliers" で値が である -1
を追加ListItem
します。 これは、宣言型マークアップを介して直接追加することも、プロパティ ウィンドウに移動して DropDownList の Items
プロパティの省略記号をクリックして、Designerを介して直接追加することもできます。
注意
Databound DropDownList に [すべて選択] 項目を追加する方法の詳細については、「 Master/Detail Filtering With a DropDownList 」チュートリアルに戻ってください。
プロパティが 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 は、ブラウザーで表示された現在の進行状況のスクリーン ショットを示しています。
図 5: Suppliers
DropDownList には、各サプライヤーの Show ALL ListItem
、Plus One が含まれています (フルサイズの画像を表示する をクリックします)
ユーザーが選択を変更した直後にユーザー インターフェイスを更新するため、DropDownList の AutoPostBack
プロパティを Suppliers
にtrue
設定します。 手順 2 では、DropDownList の選択に基づいて仕入先の情報を表示する DetailsView コントロールを作成します。 次に、手順 3 では、この DropDownList の SelectedIndexChanged
イベントのイベント ハンドラーを作成します。このイベントでは、選択した仕入先に基づいて、適切なサプライヤー情報を DetailsView にバインドするコードを追加します。
手順 2: DetailsView コントロールを追加する
DetailsView を使用して、サプライヤー情報を表示してみましょう。 すべての仕入先を表示および編集できるユーザーの場合、DetailsView ではページングがサポートされ、ユーザーは仕入先情報を一度に 1 レコードずつステップ実行できます。 ただし、ユーザーが特定のサプライヤーに対して作業している場合、DetailsView にはその特定のサプライヤーの情報のみが表示され、ページング インターフェイスは含まれません。 どちらの場合も、DetailsView では、ユーザーが仕入先の住所、市区町村、および国のフィールドを編集できるようにする必要があります。
DetailsView を DropDownList の下 Suppliers
のページに追加し、そのプロパティを ID
に SupplierDetails
設定し、前の AllSuppliersDataSource
手順で作成した ObjectDataSource にバインドします。 次に、DetailsView のスマート タグから [ページングを有効にする] チェック ボックスと [編集を有効にする] チェック ボックスをチェックします。
注意
DetailsView のスマート タグに [編集を有効にする] オプションが表示されない場合は、ObjectDataSource s メソッドをクラスの Update()
UpdateSupplierAddress
メソッドにSuppliersBLL
マップしていないためです。 少し時間を取って戻り、この構成を変更すると、DetailsView のスマート タグに [編集を有効にする] オプションが表示されます。
クラスの メソッドはSuppliersBLL
、および country
の address
supplierID
city
4 つのパラメーターのみを受け取るので、 と Phone
BoundFields が読み取り専用になるように CompanyName
DetailsView の BoundFields を変更します。UpdateSupplierAddress
さらに、BoundField を完全に SupplierID
削除します。 最後に、 AllSuppliersDataSource
ObjectDataSource には現在、 OldValuesParameterFormatString
プロパティが に original_{0}
設定されています。 このプロパティ設定を宣言構文から完全に削除するか、既定値 {0}
に設定します。
DetailsView と AllSuppliersDataSource
ObjectDataSource を構成SupplierDetails
すると、次の宣言型マークアップが作成されます。
<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: 選択した仕入先の情報のみを表示する
現在、このページには、特定の仕入先が DropDownList から選択されているかどうかに関係なく、すべての仕入先の情報が Suppliers
表示されます。 選択したサプライヤーのサプライヤー情報のみを表示するには、特定のサプライヤーに関する情報を取得する別の ObjectDataSource をページに追加する必要があります。
新しい ObjectDataSource をページに追加し、 という名前を付けます SingleSupplierDataSource
。 スマート タグから [データ ソースの構成] リンクをクリックし、クラスの GetSupplierBySupplierID(supplierID)
メソッドをSuppliersBLL
使用させます。 ObjectDataSource と同様にAllSuppliersDataSource
、SingleSupplierDataSource
ObjectDataSource の Update()
メソッドをクラスの UpdateSupplierAddress
メソッドにSuppliersBLL
マップします。
図 7: メソッドを SingleSupplierDataSource
使用 GetSupplierBySupplierID(supplierID)
するように ObjectDataSource を構成する (クリックするとフルサイズの画像が表示されます)
次に、メソッドのsupplierID
入力パラメーターのパラメーター ソースをGetSupplierBySupplierID(supplierID)
指定するように求められます。 DropDownList から選択した仕入先の情報を表示するため、パラメーター ソースとして DropDownList の SelectedValue
プロパティを使用Suppliers
します。
図 8: DropDownList を Suppliers
パラメーター ソースとして使用する supplierID
(クリックするとフルサイズの画像が表示されます)
この 2 つ目の ObjectDataSource が追加された場合でも、DetailsView コントロールは現在、常に ObjectDataSource を AllSuppliersDataSource
使用するように構成されています。 選択した DropDownList 項目に応じて DetailsView で使用されるデータ ソースを調整するロジックを追加する Suppliers
必要があります。 これを実現するには、Suppliers DropDownList のイベント ハンドラーを作成 SelectedIndexChanged
します。 最も簡単に作成するには、Designerの 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
イベント ハンドラーは、"すべての仕入先の表示/編集" オプションが選択されているかどうかを判断することから始まります。 その場合は、DetailsView を に設定SupplierDetails
し、 プロパティを AllSuppliersDataSource
0 に設定して、仕入先セットの最初のレコードにユーザーをPageIndex
返DataSourceID
します。 ただし、ユーザーが DropDownList から特定の仕入先を選択した場合、DetailsView は DataSourceID
に SingleSuppliersDataSource
割り当てられます。 使用されているデータ ソースに関係なく、SuppliersDetails
モードは読み取り専用モードに戻され、データはコントロールの DataBind()
メソッドの呼び出しによって DetailsView にSuppliersDetails
再バインドされます。
このイベント ハンドラーを配置すると、DetailsView コントロールに選択した仕入先が表示されるようになりました。ただし、[Show/Edit ALL Suppliers]\(すべての仕入先の表示/編集\) オプションが選択されていない限り、すべての仕入先をページング インターフェイスで表示できます。 図 9 は、"すべての仕入先の表示/編集" オプションが選択されたページを示しています。ページング インターフェイスが存在し、ユーザーがサプライヤーにアクセスして更新できるようにすることに注意してください。 図 10 は、Ma Maison サプライヤーが選択されたページを示しています。 この場合、Ma Maison の情報のみが表示および編集可能です。
図 9: すべての仕入先情報を表示および編集できます (フルサイズの画像を表示する をクリックします)
図 10: 選択した仕入先の情報のみを表示および編集できます (フルサイズの画像を表示する場合はクリックします)
注意
このチュートリアルでは、DropDownList コントロールと DetailsView コントロールの EnableViewState
両方を (既定値) に true
設定する必要があります。これは、DropDownList と SelectedIndex
DetailsView のプロパティの DataSourceID
変更をポストバック間で記憶する必要があるためです。
手順 4: 編集可能な GridView に仕入先製品を一覧表示する
DetailsView が完了したら、次の手順として、選択したサプライヤーが提供する製品を一覧表示する編集可能な GridView を含めます。 この GridView では、 フィールドと QuantityPerUnit
フィールドに対してのみ編集を許可するProductName
必要があります。 さらに、ページにアクセスするユーザーが特定のサプライヤーからのものである場合は、廃止 されていない 製品の更新のみを許可する必要があります。 これを実現するには、まず、および フィールドのみを入力として受け取るクラスの UpdateProducts
メソッドのオーバーロードProductsBLL
をProductID
ProductName
追加するQuantityPerUnit
必要があります。 多くのチュートリアルでこのプロセスを事前にステップ実行したので、ここでコードを見てみましょう。これは に 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 で選択したサプライヤーがこれらの製品を一覧表示する必要があるため、 クラス s GetProductsBySupplierID(supplierID)
メソッドをProductsBLL
使用します。 また、 メソッドを Update()
、先ほど作成した新しい UpdateProduct
オーバーロードにマップします。
図 11: 作成したオーバーロードを使用 UpdateProduct
するように ObjectDataSource を構成する (フルサイズの画像を表示する場合はクリックします)
メソッドのsupplierID
入力パラメーターのパラメーター ソースをGetProductsBySupplierID(supplierID)
選択するように求められます。 DetailsView で選択した仕入先の製品を表示するため、パラメーター ソースとして DetailsView コントロールの SelectedValue
プロパティを使用SuppliersDetails
します。
図 12: DetailsView s SelectedValue
プロパティをSuppliersDetails
パラメーター ソースとして使用する (フルサイズの画像を表示する場合はクリックします)
GridView に戻り、および を除くProductName
QuantityPerUnit
すべての GridView フィールドを削除しDiscontinued
、CheckBoxField をDiscontinued
読み取り専用としてマークします。 また、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 と同様に、この 1 つの プロパティ OldValuesParameterFormatString
は に original_{0}
設定されています。これにより、ユニットあたりの製品名または数量を更新しようとすると問題が発生します。 宣言構文からこのプロパティを完全に削除するか、 {0}
既定の に設定します。
この構成が完了すると、このページには、GridView で選択されたサプライヤーによって提供された製品が一覧表示されます (図 13 を参照)。 現在 、製品 の名前またはユニットあたりの数量は更新できます。 ただし、特定のサプライヤーに関連付けられているユーザーの廃止された製品に対してこのような機能が禁止されるように、ページ ロジックを更新する必要があります。 手順 5 では、この最後の部分に取り組みます。
図 13: 選択した仕入先から提供された製品が表示されます (フルサイズの画像を表示する をクリックします)
注意
この編集可能な GridView を追加すると、 Suppliers
DropDownList の SelectedIndexChanged
イベント ハンドラーを更新して、GridView を読み取り専用の状態に戻す必要があります。 それ以外の場合、製品情報の編集中に別の仕入先を選択した場合、新しい仕入先の GridView の対応するインデックスも編集可能になります。 これを防ぐには、イベント ハンドラーで GridView の EditIndex
プロパティを SelectedIndexChanged
に-1
設定するだけです。
また、GridView のビューステート (既定の動作) を有効にすることが重要であることを思い出してください。 GridView の EnableViewState
プロパティを に false
設定すると、同時実行ユーザーが意図せずにレコードを削除または編集するリスクが発生します。
手順 5: [すべての仕入先を表示/編集] が選択されていない場合に、廃止された製品の編集を禁止する
ProductsBySupplier
GridView は完全に機能しますが、現在、特定のサプライヤーからのユーザーに対するアクセス権が多すぎます。 このようなユーザーは、ビジネス ルールに従って、廃止された製品を更新することはできません。 これを適用するには、サプライヤーのユーザーがページにアクセスしているときに、廃止された製品を含む GridView 行の [編集] ボタンを非表示 (または無効にする) ことができます。
GridView イベントのイベント ハンドラーを RowDataBound
作成します。 このイベント ハンドラーでは、ユーザーが特定のサプライヤーに関連付けられているかどうかを判断する必要があります。このチュートリアルでは、Suppliers DropDownList の SelectedValue
プロパティを確認することで判断できます。-1 以外の場合、ユーザーは特定のサプライヤーに関連付けられます。 このようなユーザーの場合は、製品が廃止されたかどうかを判断する必要があります。 GridView のフッターチュートリアルの概要情報の表示に関するチュートリアルで説明されているように、 プロパティを使用して e.Row.DataItem
GridView 行にバインドされた実際ProductRow
のインスタンスへの参照を取得できます。 製品が廃止された場合は、前のチュートリアル「 削除時の Client-Side 確認の追加」で説明した手法を使用して、GridView の CommandField の [編集] ボタンへのプログラムによる参照を取得できます。 参照を取得したら、ボタンを非表示または無効にすることができます。
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 は、ニューオーリンズ の Cajun Delights サプライヤー向けに廃止された製品です。 この特定のサプライヤーのページにアクセスすると、この製品の [編集] ボタンが非表示になります (図 14 を参照)。 ただし、[すべての仕入先の表示/編集] を使用してアクセスする場合は、[編集] ボタンを使用できます (図 15 を参照)。
図 14: Supplier-Specific ユーザーの場合、Chef Anton s Gumbo Mix の [編集] ボタンが非表示になっている (フルサイズの画像を表示する をクリックします)
図 15: [すべての仕入先ユーザーの表示/編集] の場合、[Chef Anton s Gumbo Mix] の [編集] ボタンが表示されます (フルサイズの画像を表示するにはクリックします)
ビジネス ロジック層でのアクセス権の確認
このチュートリアルでは、ASP.NET ページは、ユーザーが表示できる情報と更新できる製品に関するすべてのロジックを処理します。 このロジックは、ビジネス ロジック レイヤーにも存在するのが理想的です。 たとえば、(すべてのサプライヤーをSuppliersBLL
返す) クラスの GetSuppliers()
メソッドには、現在ログオンしているユーザーが特定のサプライヤーに関連付けられていないことを確認するためのチェックが含まれている場合があります。 同様にUpdateSupplierAddress
、 メソッドには、現在ログオンしているユーザーが会社で働いている (したがって、すべての仕入先住所情報を更新できる) か、データが更新されているサプライヤーに関連付けられていることを確認するためのチェックを含めることができます。
このチュートリアルでは、BLL クラスがアクセスできないページの DropDownList によってユーザーの権限が決定されるため、このような BLL 層チェックはここに含めませんでした。 メンバーシップ システムまたは ASP.NET によって提供される既定の認証スキームの 1 つ (Windows 認証 など) を使用する場合、現在ログオンしているユーザーの情報とロール情報に BLL からアクセスできるため、プレゼンテーションレイヤーと BLL レイヤーの両方でこのようなアクセス権チェックが可能になります。
まとめ
ユーザー アカウントを提供するほとんどのサイトでは、ログインしているユーザーに基づいてデータ変更インターフェイスをカスタマイズする必要があります。 管理ユーザーはレコードを削除および編集できますが、管理者以外のユーザーは自分で作成したレコードの更新または削除のみに制限される場合があります。 シナリオに関係なく、データ Web コントロール、ObjectDataSource、および Business Logic Layer クラスを拡張して、ログオンしているユーザーに基づいて特定の機能を追加または拒否できます。 このチュートリアルでは、ユーザーが特定のサプライヤーに関連付けられているかどうか、または会社で働いているかどうかに応じて、表示可能なデータと編集可能なデータを制限する方法について説明しました。
このチュートリアルでは、GridView、DetailsView、および FormView コントロールを使用してデータを挿入、更新、削除する方法について説明します。 次のチュートリアルから始めて、ページングと並べ替えのサポートを追加することに注目します。
プログラミングに満足!
著者について
7 冊の ASP/ASP.NET 書籍の著者であり、 4GuysFromRolla.com の創設者である Scott Mitchell は、1998 年から Microsoft Web テクノロジと協力しています。 Scott は、独立したコンサルタント、トレーナー、ライターとして働いています。 彼の最新の本は サムズは24時間で2.0 ASP.NET 自分自身を教えています。 にアクセスするか、ブログを使用して にアクセスmitchell@4GuysFromRolla.comできます。これは でhttp://ScottOnWriting.NET見つけることができます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示