Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В веб-приложении, которое позволяет пользователям изменять данные, разные учетные записи пользователей могут иметь разные права на редактирование данных. В этом руководстве мы рассмотрим, как динамически настраивать возможности изменения данных с учетом посещаемого пользователя.
Введение
Ряд веб-приложений поддерживают учетные записи пользователей и предоставляют различные варианты, отчеты и функции в зависимости от вошедшего пользователя. Например, в наших учебниках мы можем разрешить пользователям из компаний-поставщиков входить на сайт и обновлять общую информацию о своих продуктах ( название и количество на единицу), а также сведения о поставщике, такие как название компании, адрес, сведения о контактном лице и т. д. Кроме того, нам может потребоваться включить некоторые учетные записи пользователей для сотрудников из нашей компании, чтобы они могли входить в систему и обновлять сведения о продукте, такие как единицы на складе, уровень изменения порядка и т. д. Наше веб-приложение также может разрешить анонимным пользователям посещать (пользователям, которые не вошли в систему), но ограничивает их только просмотром данных. При наличии такой системы учетных записей пользователей мы хотели бы, чтобы веб-элементы управления данными на страницах ASP.NET предлагали возможности вставки, редактирования и удаления, подходящие для текущего пользователя, выполнившего вход.
В этом руководстве мы рассмотрим, как динамически настраивать возможности изменения данных с учетом посещаемого пользователя. В частности, мы создадим страницу со сведениями о поставщиках в редактируемом представлении DetailsView, а также GridView со списком продуктов, предоставляемых поставщиком. Если пользователь, посещая страницу, из нашей компании, он может: просмотреть сведения о поставщике; изменить свой адрес; и изменить информацию для любого продукта, предоставленного поставщиком. Однако если пользователь из определенной компании, он может просматривать и изменять только свои собственные адресные данные и изменять только те продукты, которые не были помечены как неподдерживаемые.
Рис. 1. Пользователь из нашей компании может изменить любую информацию о поставщике (щелкните для просмотра полноразмерного изображения)
Рис. 2. Пользователь из определенного поставщика может только просматривать и изменять свои данные (щелкните, чтобы просмотреть полноразмерное изображение)
Приступим!
Примечание
Система членства ASP.NET 2.0 s предоставляет стандартизованную расширяемую платформу для создания, а также управления и проверки учетных записей пользователей. Поскольку изучение системы членства выходит за рамки область этих учебников, это руководство вместо этого "подделывает" членство, позволяя анонимным посетителям выбирать, от конкретного поставщика или от нашей компании. Дополнительные сведения о членстве см. в серии статей Изучение ASP.NET 2.0 s Членство, роли и профиль .
Шаг 1. Предоставление пользователю разрешения указать свои права доступа
В реальном веб-приложении сведения об учетной записи пользователя будут включать сведения о том, работали ли они в нашей компании или на определенном поставщике, и эти сведения будут доступны программным способом с наших ASP.NET страниц после входа пользователя на сайт. Эти сведения могут быть записаны через систему ролей ASP.NET 2.0 s, как сведения об учетной записи на уровне пользователя через систему профилей или с помощью некоторых пользовательских средств.
Так как цель этого руководства — продемонстрировать настройку возможностей изменения данных на основе вошедшего в систему пользователя и не предназначен для демонстрации членства, ролей и систем профилей ASP.NET 2.0, мы будем использовать очень простой механизм для определения возможностей пользователя, посещающего страницу, — DropDownList, из которого пользователь может указать, должен ли он иметь возможность просматривать и изменять какие-либо сведения о поставщиках, или: кроме того, сведения о конкретных поставщиках, которые они могут просматривать и изменять. Если пользователь указывает, что может просматривать и изменять все сведения о поставщиках (значение по умолчанию), он может просматривать все поставщики, изменять адресную информацию поставщика, а также изменять название и количество на единицу для любого продукта, предоставленного выбранным поставщиком. Если пользователь указывает, что он может просматривать и редактировать только определенного поставщика, то он может просматривать только сведения и продукты для этого поставщика и может обновлять только название и количество на единицу информации для тех продуктов, которые не прекращены.
Первым шагом в этом руководстве является создание этого DropDownList и заполнение его поставщиками в системе. Откройте страницу в папкеEditInsertDelete
, добавьте DropDownList, свойство которого ID
имеет значение Suppliers
, и привяжите этот dropDownList к новому объекту ObjectDataSource с именем AllSuppliersDataSource
.UserLevelAccess.aspx
Рис. 3. Создание объекта ObjectDataSource с именем AllSuppliersDataSource
(щелкните для просмотра полноразмерного изображения)
Так как мы хотим, чтобы этот DropDownList включал всех поставщиков, настройте ObjectDataSource для вызова SuppliersBLL
метода класса GetSuppliers()
. Кроме того, убедитесь, что метод ObjectDataSource Update()
сопоставлен с SuppliersBLL
методом класса UpdateSupplierAddress
, так как этот объект ObjectDataSource также будет использоваться в DetailsView, который мы добавим на шаге 2.
После завершения работы мастера ObjectDataSource выполните действия, настроив Suppliers
DropDownList таким образом, чтобы отображалось CompanyName
поле данных и использовалось SupplierID
поле данных в качестве значения для каждого ListItem
.
Рис. 4. Настройка Suppliers
раскрывающегося списка для использования CompanyName
полей данных и SupplierID
(щелкните для просмотра полноразмерного изображения)
На этом этапе DropDownList перечисляет названия компаний поставщиков в базе данных. Однако также необходимо включить параметр "Показать/изменить все поставщики" в Раскрывающийся список. Для этого присвойте свойству DropDownList AppendDataBoundItems
значение true
, а затем добавьте ListItem
, свойство которого Text
равно "Показать/изменить все поставщики" и значение которого равно -1
.Suppliers
Его можно добавить непосредственно через декларативную разметку или через Designer, перейдя к окно свойств и щелкнув многоточие в свойстве DropDownList sItems
.
Примечание
Дополнительные сведения о добавлении элемента Select All в список dropDownList см. в руководстве Фильтрация основных и подробных данных с помощью 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
список содержит элемент Show ALL ListItem
, а также один для каждого поставщика (щелкните для просмотра полноразмерного изображения)
Так как мы хотим обновить пользовательский интерфейс сразу после изменения выбора пользователем Suppliers
, задайте для свойства DropDownList значение AutoPostBack
true
. На шаге 2 мы создадим элемент управления DetailsView, который будет отображать сведения о поставщиках на основе выбора DropDownList. Затем на шаге 3 мы создадим обработчик событий для этого события DropDownList SelectedIndexChanged
, в котором добавим код, который привязывает соответствующие сведения о поставщике к DetailsView на основе выбранного поставщика.
Шаг 2. Добавление элемента управления DetailsView
Давайте используем DetailsView для отображения сведений о поставщике. Для пользователя, который может просматривать и редактировать всех поставщиков, DetailsView будет поддерживать разбиение по страницам, позволяя пользователю пошагово просматривать сведения о поставщике по одной записи за раз. Однако если пользователь работает с конкретным поставщиком, в DetailsView будут отображаться только сведения об этом конкретном поставщике и не будет содержаться интерфейс разбиения по страницам. В любом случае элемент DetailsView должен разрешить пользователю изменять поля адреса, города и страны поставщика.
Добавьте DetailsView на страницу под Suppliers
DropDownList, задайте для его ID
свойства SupplierDetails
значение и привяжите его к объекту AllSuppliersDataSource
ObjectDataSource, созданному на предыдущем шаге. Затем проверка флажки Включить разбиение по страницам и Включить редактирование из смарт-тега DetailsView.
Примечание
Если параметр Включить редактирование не отображается в смарт-теге DetailsView, это связано с тем, что вы не сопоставили метод ObjectDataSource Update()
с методом SuppliersBLL
класса UpdateSupplierAddress
. Уделите немного времени, чтобы вернуться и внести это изменение конфигурации, после чего параметр Включить редактирование должен появиться в смарт-теге DetailsView.
SuppliersBLL
Так как метод класса UpdateSupplierAddress
принимает только четыре параметра — supplierID
, address
, city
и country
— измените BoundFields DetailsView, чтобы CompanyName
и Phone
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 и обновить сведения об адресе выбранного поставщика, независимо от выбора, сделанного в Suppliers
Раскрывающемся списке (см. рис. 6).
Рис. 6. Можно просмотреть любые сведения о поставщиках и обновить их адрес (щелкните для просмотра полноразмерного изображения)
Шаг 3. Отображение только сведений о выбранном поставщике
На нашей странице в настоящее время отображаются сведения обо всех поставщиках, независимо от того, был ли выбран конкретный поставщик из Suppliers
Раскрывающегося списка. Чтобы отобразить только сведения о поставщике для выбранного поставщика, необходимо добавить на страницу еще один объект ObjectDataSource, который получает сведения о конкретном поставщике.
Добавьте на страницу объект ObjectDataSource, назвав его SingleSupplierDataSource
. В смарт-теге щелкните ссылку Configure Data Source (Настройка источника данных) и выберите SuppliersBLL
метод класса s GetSupplierBySupplierID(supplierID)
. Как и в случае AllSuppliersDataSource
с ObjectDataSource, SingleSupplierDataSource
метод ObjectDataSource Update()
сопоставлен с методом SuppliersBLL
класса UpdateSupplierAddress
.
Рис. 7. Настройка SingleSupplierDataSource
ObjectDataSource для использования GetSupplierBySupplierID(supplierID)
метода (щелкните для просмотра полноразмерного изображения)
Затем мы повторно запросим указать источник параметра для входного GetSupplierBySupplierID(supplierID)
параметра метода supplierID
. Так как мы хотим отобразить сведения о поставщике, выбранном из DropDownList, используйте Suppliers
свойство DropDownList в SelectedValue
качестве источника параметров.
Рис. 8. Использование Suppliers
DropDownList в supplierID
качестве источника параметров (щелкните для просмотра полноразмерного изображения)
Даже при добавлении этого второго объекта ObjectDataSource элемент управления DetailsView в настоящее время настроен на постоянное использование AllSuppliersDataSource
ObjectDataSource. Нам нужно добавить логику для настройки источника данных, используемого DetailsView в зависимости от выбранного Suppliers
элемента DropDownList. Для этого создайте SelectedIndexChanged
обработчик событий для раскрывающегося списка поставщиков. Его проще всего создать, дважды щелкнув раскрывающийся список в Designer. Этот обработчик событий должен определить, какой источник данных следует использовать, и повторно привязать данные к DetailsView. Для этого используется следующий код:
protected void Suppliers_SelectedIndexChanged(object sender, EventArgs e)
{
if (Suppliers.SelectedValue == "-1")
{
// 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";
// Ensure that the DetailsView is in read-only mode
SupplierDetails.ChangeMode(DetailsViewMode.ReadOnly);
// Need to "refresh" the DetailsView
SupplierDetails.DataBind();
}
Обработчик событий начинается с определения того, был ли выбран параметр "Показать/изменить все поставщики". Если это так, он устанавливает SupplierDetails
для DetailsView DataSourceID
значение AllSuppliersDataSource
и возвращает пользователю первую запись в наборе поставщиков, задав PageIndex
для свойства значение 0. Однако если пользователь выбрал конкретного поставщика из Раскрывающегося списка, элемент DetailsView DataSourceID
назначается .SingleSuppliersDataSource
Независимо от того, какой источник данных используется, SuppliersDetails
режим возвращается в режим только для чтения, а данные возвращаются в DetailsView путем вызова SuppliersDetails
метода элемента управления DataBind()
.
При добавлении этого обработчика событий элемент управления DetailsView теперь отображает выбранного поставщика, если не выбран параметр "Показать/изменить все поставщики". В этом случае все поставщики можно просмотреть через интерфейс разбиения на страницы. На рисунке 9 показана страница с выбранным параметром "Показать/изменить все поставщики"; Обратите внимание, что интерфейс разбиения на страницы присутствует, что позволяет пользователю посетить и обновить любого поставщика. На рисунке 10 показана страница с выбранным поставщиком Ma Maison. В этом случае просматривать и редактировать можно только информацию Ma Maison.
Рис. 9. Все сведения о поставщиках можно просмотреть и изменить (щелкните для просмотра полноразмерного изображения)
Рис. 10. Можно просматривать и изменять только сведения о выбранном поставщике (щелкните для просмотра полноразмерного изображения)
Примечание
В этом руководстве для элементов управления EnableViewState
DropDownList и DetailsView необходимо задать значение true
(по умолчанию), так как изменения свойств DropDownList SelectedIndex
и DetailsView DataSourceID
должны запоминаться при обратной отправке.
Шаг 4. Перечисление продуктов поставщиков в редактируемом представлении GridView
Завершив Просмотр сведений, мы включим редактируемый Элемент GridView со списком продуктов, предоставляемых выбранным поставщиком. Этот GridView должен разрешать изменения только ProductName
в полях и QuantityPerUnit
. Кроме того, если пользователь посещает страницу от определенного поставщика, он должен разрешать обновления только тех продуктов, которые не отменены. Для этого необходимо сначала добавить перегрузку ProductsBLL
метода класса UpdateProducts
, которая принимает только ProductID
поля , ProductName
и QuantityPerUnit
в качестве входных данных. Мы предварительно выполнили этот процесс в многочисленных руководствах, поэтому давайте просто взглянем на код, который следует добавить в ProductsBLL
:
[System.ComponentModel.DataObjectMethodAttribute(
System.ComponentModel.DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, string quantityPerUnit, int productID)
{
Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
if (products.Count == 0)
// no matching record found, return false
return false;
Northwind.ProductsRow product = products[0];
product.ProductName = productName;
if (quantityPerUnit == null)
product.SetQuantityPerUnitNull();
else
product.QuantityPerUnit = quantityPerUnit;
// Update the product record
int rowsAffected = Adapter.Update(product);
// Return true if precisely one row was updated, otherwise false
return rowsAffected == 1;
}
Создав эту перегрузку, мы готовы добавить элемент управления GridView и связанный с ним ObjectDataSource. Добавьте новый элемент GridView на страницу, задайте для его ID
свойства ProductsBySupplier
значение и настройте его для использования нового объекта ObjectDataSource с именем ProductsBySupplierDataSource
. Так как мы хотим, чтобы gridView выводит список этих продуктов выбранным поставщиком, используйте ProductsBLL
метод класса s GetProductsBySupplierID(supplierID)
. Кроме того, сопоставьте Update()
метод с новой UpdateProduct
перегрузкой, которую мы только что создали.
Рис. 11. Настройка ObjectDataSource для использования только что созданной UpdateProduct
перегрузки (щелкните для просмотра полноразмерного изображения)
Мы повторно запросили выбор источника параметра для входного GetProductsBySupplierID(supplierID)
параметра метода supplierID
. Так как мы хотим отобразить продукты для поставщика, выбранного в DetailsView, используйте SuppliersDetails
свойство DetailsView элемента управления в SelectedValue
качестве источника параметров.
Рис. 12. Использование SuppliersDetails
свойства DetailsView в SelectedValue
качестве источника параметров (щелкните для просмотра полноразмерного изображения)
Вернувшись в GridView, удалите все поля GridView, кроме , QuantityPerUnit
и Discontinued
, помечая Discontinued
CheckBoxField как доступные только для ProductName
чтения. Кроме того, проверка параметр Включить редактирование из смарт-тега 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 EditIndex
значение -1
в обработчике SelectedIndexChanged
событий.
Кроме того, помните, что важно включить состояние представления GridView (поведение по умолчанию). Если для свойства false
GridView задано EnableViewState
значение , возникает риск того, что одновременные пользователи непреднамеренно удаляют или редактируют записи.
Шаг 5. Запрет на редактирование для продуктов с прекращением поддержки, если не выбран параметр Показать или изменить все поставщики
ProductsBySupplier
Хотя GridView является полностью функциональным, в настоящее время он предоставляет слишком большой доступ тем пользователям, которые от определенного поставщика. Согласно нашим бизнес-правилам, такие пользователи не должны иметь возможности обновлять продукты, снятые с производства. Чтобы применить эту функцию, можно скрыть (или отключить) кнопку Изменить в строках GridView с продуктами, которые не поддерживаются при посещении страницы пользователем от поставщика.
Создайте обработчик событий для события GridView RowDataBound
. В этом обработчике событий необходимо определить, связан ли пользователь с определенным поставщиком, что в этом руководстве можно определить, проверив свойство Поставщики DropDownList SelectedValue
. Если это нечто, отличное от -1, пользователь связан с определенным поставщиком. Для таких пользователей необходимо определить, не прекращается ли выпуск продукта. Мы можем получить ссылку на фактический ProductRow
экземпляр, привязанный к строке GridView, с помощью e.Row.DataItem
свойства , как описано в руководстве Отображение сводной информации в нижнем колонтитуле GridView . Если продукт не используется, мы можем получить программную ссылку на кнопку Изменить в CommandField GridView, используя методы, описанные в предыдущем руководстве Добавление Client-Side подтверждение при удалении. Получив ссылку, мы можем скрыть или отключить кнопку.
protected void ProductsBySupplier_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Is this a supplier-specific user?
if (Suppliers.SelectedValue != "-1")
{
// Get a reference to the ProductRow
Northwind.ProductsRow product =
(Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;
// Is this product discontinued?
if (product.Discontinued)
{
// Get a reference to the Edit LinkButton
LinkButton editButton = (LinkButton)e.Row.Cells[0].Controls[0];
// Hide the Edit button
editButton.Visible = false;
}
}
}
}
При наличии этого обработчика событий при посещении этой страницы в качестве пользователя от определенного поставщика те продукты, которые не поддерживаются, не могут изменяться, так как кнопка Изменить скрыта для этих продуктов. Например, Chef Антон с Gumbo Mix является прекращенным продуктом для поставщика New Orleans 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 (например, проверка подлинности Windows), вошедший в систему пользователь может получить доступ из BLL, что делает такую проверку прав доступа возможной как на уровне презентации, так и на уровне BLL.
Сводка
Большинству сайтов, предоставляющих учетные записи пользователей, необходимо настроить интерфейс изменения данных на основе вошедшего пользователя. Пользователи с правами администратора могут удалять и изменять любые записи, тогда как пользователи, не являющиеся администраторами, могут быть ограничены только обновлением или удалением записей, созданных ими самостоятельно. Независимо от сценария, классы веб-элементов управления данными, ObjectDataSource и уровня бизнес-логики можно расширить, чтобы добавить или запретить определенные функции на основе вошедшего пользователя. В этом руководстве мы узнали, как ограничить доступные для просмотра и редактирования данные в зависимости от того, был ли пользователь связан с определенным поставщиком или работал ли он в нашей компании.
В этом руководстве мы завершаем изучение вставки, обновления и удаления данных с помощью элементов управления GridView, DetailsView и FormView. Начиная со следующего учебника, мы переключим наше внимание на добавление поддержки разбиения по страницам и сортировки.
Счастливого программирования!
Об авторе
Скотт Митчелл( Scott Mitchell), автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с веб-технологиями Майкрософт с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Sams Teach Yourself ASP.NET 2.0 в 24 часах. Он может быть доступен в mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.