Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В веб-приложении, позволяющем пользователям изменять данные, разные учетные записи пользователей могут иметь разные права редактирования данных. В этом руководстве мы рассмотрим, как динамически настраивать возможности изменения данных на основе посещаемого пользователя.
Введение
Ряд веб-приложений поддерживают учетные записи пользователей и предоставляют различные параметры, отчеты и функциональные возможности на основе пользователя, вошедшего в систему. Например, в наших руководствах мы можем позволить пользователям от поставщиков войти на сайт и обновить общие сведения о своих продуктах - их имя и количество на единицу, возможно, наряду с информацией о поставщике, например их название компании, адрес, сведения контактного лица и т. д. Кроме того, мы можем включить некоторые учетные записи пользователей из нашей компании, чтобы они могли войти в систему и обновить сведения о продукте, такие как единицы на складе, уровень повторного заказа и т. д. Наше веб-приложение также может позволить анонимным пользователям посетить (пользователи, которые не вошли в систему), но ограничить их только просмотром данных. С такой системой учетной записи пользователя мы хотели бы, чтобы веб-элементы управления данными на страницах ASP.NET предложили возможности вставки, редактирования и удаления, подходящие для текущего вошедшего в систему пользователя.
В этом руководстве мы рассмотрим, как динамически настраивать возможности изменения данных на основе посещаемого пользователя. В частности, мы создадим страницу, которая отображает сведения о поставщиках в редактируемом DetailsView вместе с GridView, в котором перечислены продукты, предоставляемые поставщиком. Если пользователь, посещающий страницу, является сотрудником нашей компании, он может: просмотреть любую информацию о поставщике; изменить его адрес; и изменить информацию о любом продукте, предоставленном поставщиком. Однако если пользователь принадлежит определенной компании, он может просматривать и изменять только свои собственные сведения об адресе и изменять только свои продукты, которые не были помечены как прекращенные.
Рис. 1. Пользователь из нашей компании может изменить любую информацию поставщика (щелкните, чтобы просмотреть изображение полного размера)
Рис. 2. Пользователь из конкретного поставщика может просматривать и изменять свои сведения (щелкните, чтобы просмотреть изображение полного размера)
Давайте приступим!
Замечание
ASP.NET 2.0 система членства предоставляет стандартизованную расширяемую платформу для создания, управления и проверки учетных записей пользователей. Поскольку изучение системы членства не входит в рамки этих учебников, это руководство вместо этого "симулирует" членство, позволяя анонимным посетителям выбирать, являются ли они представителями определенного поставщика или нашей компании. Дополнительные сведения о членстве см. в серии статей "Анализ ASP.NET 2.0", "Роли" и "Профиль".
Шаг 1. Разрешение пользователю указать свои права доступа
В реальном веб-приложении сведения об учетной записи пользователя будут включать, работали ли они в нашей компании или для конкретного поставщика, и эта информация будет программно доступна на страницах ASP.NET после входа пользователя на сайт. Эту информацию можно получить с помощью системы ролей ASP.NET 2.0, как информацию об учетной записи на уровне пользователя через систему профилей или с помощью некоторых пользовательских способов.
Так как цель этого руководства заключается в том, чтобы продемонстрировать возможности изменения данных на основе зарегистрированного пользователя, и не предназначено для демонстрации ASP.NET 2.0, членства, ролей и профилей, мы будем использовать очень простой механизм для определения возможностей пользователя, посещающего страницу, — выпадающий список (DropDownList), из которого пользователь может указать, может ли он просматривать и изменять всю информацию о поставщиках или, кроме того, какие сведения о конкретном поставщике он может просматривать и изменять. Если пользователь указывает, что она может просматривать и изменять все сведения о поставщике (по умолчанию), она может просматривать все поставщики, изменять сведения об адресе поставщика и изменять имя и количество для любого продукта, предоставленного выбранным поставщиком. Если пользователь указывает, что она может просматривать и изменять данные только одного конкретного поставщика, то она может просматривать только детали и продукты этого поставщика, а обновлять только имя и количество единицы товара для тех продуктов, которые не сняты с производства.
Первым шагом в этом руководстве будет создание выпадающего списка и заполнение его поставщиками из текущей системы. Откройте страницу UserLevelAccess.aspx
в папке EditInsertDelete
, добавьте элемент DropDownList, свойство которого ID
установлено на Suppliers
, и привяжите этот DropDownList к новому источнику данных ObjectDataSource с именем AllSuppliersDataSource
.
Рис. 3. Создание объекта ObjectDataSource С именем AllSuppliersDataSource
(щелкните, чтобы просмотреть изображение полного размера)
Поскольку мы хотим, чтобы этот DropDownList включал всех поставщиков, настройте ObjectDataSource для вызова метода класса SuppliersBLL
GetSuppliers()
. Кроме того, убедитесь, что метод Update()
ObjectDataSource сопоставляется с методом SuppliersBLL
класса UpdateSupplierAddress
, так как этот ObjectDataSource также будет использоваться в DetailsView, который мы добавим на втором шаге.
После завершения мастера ObjectDataSource выполните действия, настроив Suppliers
выпадающий список так, чтобы он отображал CompanyName
поле данных и использовал SupplierID
поле данных в качестве значения для каждого ListItem
.
Рис. 4. Настройка Suppliers
раскрывающегося списка для использования CompanyName
полей данных и SupplierID
полей данных (щелкните, чтобы просмотреть изображение полного размера)
На этом этапе в раскрывающемся списке перечислены названия компаний-поставщиков в этой базе данных. Однако также необходимо включить параметр Show/Edit ALL Providers (Показать и изменить всех поставщиков) в dropDownList. Для этого установите свойство Suppliers
DropDownList AppendDataBoundItems
на true
, а затем добавьте ListItem
, у которого свойство Text
равно "Show/Edit ALL Suppliers" и значение -1
. Это можно добавить непосредственно через декларативную разметку или через конструктор, перейдя в окно свойств и щелкнув многоточие в свойстве DropDownList Items
.
Замечание
Обратитесь к руководству по фильтрации Master/Detail с помощью раскрывающегося списка, чтобы получить более подробную информацию о добавлении элемента 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 показан снимок экрана текущего хода выполнения при просмотре через браузер.
Рис. 5. Раскрывающийся Suppliers
список содержит "показать ВСЕ" 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 не отображается, это потому что вы не сопоставили метод Update()
элемента ObjectDataSource с методом SuppliersBLL
класса UpdateSupplierAddress
. Вернитесь и измените эту конфигурацию, после чего параметр "Включить редактирование" должен отображаться в смарт-теге DetailsView.
SuppliersBLL
Так как метод класса UpdateSupplierAddress
принимает всего четыре параметра — supplierID
, address
, city
и country
— измените поля BoundFields DetailsView, чтобы CompanyName
и Phone
BoundFields были доступны только для чтения. Кроме того, удалите SupplierID
BoundField полностью. Наконец, у AllSuppliersDataSource
ObjectDataSource в настоящее время свойство OldValuesParameterFormatString
установлено в original_{0}
. Чтобы полностью удалить этот параметр свойства из декларативного синтаксиса или установить его значение по умолчанию {0}
, выполните следующие действия.
После настройки DetailsView и SupplierDetails
ObjectDataSource у нас будет следующая декларативная AllSuppliersDataSource
разметка:
<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
DropDownList (см. рис. 6).
Рис. 6. Любые сведения о поставщиках можно просмотреть и обновить его адрес (щелкните, чтобы просмотреть изображение полного размера)
Шаг 3. Отображение только сведений о выбранном поставщике
На нашей странице в настоящее время отображаются сведения для всех поставщиков независимо от того, выбран ли конкретный поставщик из Suppliers
DropDownList. Чтобы отобразить только сведения о выбранном поставщике, необходимо добавить на нашу страницу другой ObjectDataSource, который извлекает информацию о конкретном поставщике.
Добавьте новый ObjectDataSource на страницу, именуя его SingleSupplierDataSource
. В смарт-теге щелкните ссылку "Настроить источник данных" и используйте SuppliersBLL
метод класса GetSupplierBySupplierID(supplierID)
. Как и в случае с AllSuppliersDataSource
ObjectDataSource, метод SingleSupplierDataSource
ObjectDataSource Update()
должен быть сопоставлен с методом класса SuppliersBLL
UpdateSupplierAddress
.
Рис. 7. Настройка SingleSupplierDataSource
ObjectDataSource для использования GetSupplierBySupplierID(supplierID)
метода (щелкните, чтобы просмотреть изображение полного размера)
Затем нам будет предложено указать источник параметров для GetSupplierBySupplierID(supplierID)
входного параметра метода supplierID
. Поскольку мы хотим показать информацию о поставщике, выбранном из DropDownList, используйте свойство DropDownList как источник параметров.
Используйте выпадающий список поставщиков в качестве источника параметра supplierID.
Рис. 8. Использование Suppliers
DropDownList в качестве supplierID
источника параметров (щелкните, чтобы просмотреть изображение полного размера)
Даже с добавлением второго объекта ObjectDataSource элемент управления DetailsView всегда настраивается для использования AllSuppliersDataSource
ObjectDataSource. Нам нужно добавить логику для настройки источника данных, используемого в DetailsView в зависимости от выбранного Suppliers
элемента DropDownList. Для этого создайте обработчик событий для списка выбора поставщиков. Это проще всего сделать, дважды щелкнув раскрывающийся список в визуальном конструкторе. Этот обработчик событий должен определить, какой источник данных следует использовать и должен повторно привязать данные к 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();
}
Обработчик событий начинается с определения того, был ли выбран параметр Show/Edit ALL Providers. Если это так, он задает SupplierDetails
значение DetailsView и DataSourceID
AllSuppliersDataSource
возвращает пользователю первую запись в наборе поставщиков, задав свойству PageIndex
значение 0. Если, однако, пользователь выбрал конкретного поставщика из DropDownList, DetailsView присваивается DataSourceID
на SingleSuppliersDataSource
. Независимо от того, какой источник данных используется, режим SuppliersDetails
возвращается в режим только для чтения, а данные снова связываются с DetailsView путем вызова метода SuppliersDetails
элемента управления DataBind()
.
С помощью этого обработчика событий элемент управления DetailsView теперь отображает выбранного поставщика, если только не выбран параметр Show/Edit ALL Providers(Показать или изменить все поставщики), в этом случае все поставщики могут просматриваться через интерфейс разбиения по страницам. На рисунке 9 показана страница с выбранным параметром "Показать и изменить все поставщики"; обратите внимание, что интерфейс разбиения по страницам присутствует, позволяя пользователю посещать и обновлять любого поставщика. На рисунке 10 показана страница с выбранным поставщиком Ma Maison. Только сведения Ma Maison доступны для просмотра и редактирования в этом случае.
Рис. 9. Все сведения о поставщиках можно просмотреть и изменить (щелкните, чтобы просмотреть изображение полного размера)
Рис. 10. Только выбранные сведения о поставщике можно просмотреть и изменить (щелкните, чтобы просмотреть изображение полного размера)
Замечание
В этом руководстве элемент управления DropDownList EnableViewState
и DetailsView true
должен иметь значение (по умолчанию), поскольку изменения свойства DropDownList SelectedIndex
и свойства DetailsView DataSourceID
должны сохраняться в ходе постбэков.
Шаг 4. Перечисление продуктов поставщиков в редактируемом GridView
После завершения DetailsView необходимо включить редактируемый GridView, который перечисляет эти продукты, предоставляемые выбранным поставщиком. Этот GridView должен разрешать изменения только для ProductName
полей и QuantityPerUnit
полей. Кроме того, если пользователь, посещающий страницу, является представителем определенного поставщика, следует разрешать обновлять только те продукты, которые не сняты с производства. Для этого сначала необходимо добавить перегрузку метода класса ProductsBLL
, который принимает только поля UpdateProducts
, ProductID
и ProductName
в качестве входных данных. Мы шагнули через этот процесс заранее в многочисленных руководствах, поэтому давайте просто рассмотрим код здесь, который следует добавить в 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
GetProductsBySupplierID(supplierID)
. Кроме того, метод Update()
должен быть сопоставлен с новой перегрузкой UpdateProduct
, которую мы только что создали.
Рис. 11. Настройка ObjectDataSource для использования только что созданной перегрузки UpdateProduct
(щелкните, чтобы просмотреть изображение полного размера)
Нам будет предложено выбрать источник параметров для GetProductsBySupplierID(supplierID)
входного supplierID
параметра метода. Так как мы хотим показать продукты для поставщика, который выбран в DetailsView, используйте свойство SuppliersDetails
элемента управления SelectedValue
DetailsView в качестве источника параметров.
Рис. 12. Использование SuppliersDetails
свойства DetailsView SelectedValue
в качестве источника параметров (щелкните, чтобы просмотреть изображение полного размера)
Вернитесь в GridView, удалите все поля GridView, за исключением ProductName
, QuantityPerUnit
и Discontinued
, пометив 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 EditIndex
значение -1
в обработчике события SelectedIndexChanged
.
Кроме того, помните, что важно включить состояние представления GridView (поведение по умолчанию). Если вы задаете свойству EnableViewState
GridView значение false
, вы рискуете тем, что одновременные пользователи могут непреднамеренно удалять или редактировать записи.
Шаг 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;
}
}
}
}
При наличии этого обработчика событий, когда пользователь из конкретного поставщика посещает эту страницу, продукты, которые сняты с производства, не подлежат редактированию, так как кнопка «Изменить» для них скрыта. Например, продукт «Гамбо Микс» от Шефа Антона снят с производства у поставщика New Orleans Cajun Delights. При посещении страницы для этого конкретного поставщика кнопка "Изменить" для этого продукта скрыта от зрения (см. рис. 14). Однако при использовании функции "Показать/Редактировать всех поставщиков" становится доступна кнопка "Редактировать" (см. рис. 15).
Рис. 14: Для пользователей Supplier-Specific кнопка "Редактировать" для смеси гамбо от шефа Антона скрыта (щелкните, чтобы просмотреть изображение в полном размере)
Рис. 15: Для отображения и редактирования пользователей всех поставщиков отображается кнопка "Изменить" для Gumbo Mix от шеф-повара Антона (щелкните, чтобы просмотреть изображение полного размера)
Проверка прав доступа на уровне бизнес-логики
В этом руководстве страница ASP.NET обрабатывает всю логику в отношении информации, которую пользователь может видеть и какие продукты он может обновить. В идеале эта логика также будет присутствовать на уровне бизнес-логики. Например, метод класса SuppliersBLL
GetSuppliers()
(который возвращает всех поставщиков) может включать проверку, чтобы убедиться, что текущий пользователь не связан с конкретным поставщиком. Аналогичным образом, метод UpdateSupplierAddress
может включать проверку, чтобы убедиться, что текущий пользователь работает в нашей компании (и поэтому может обновлять сведения об адресе всех поставщиков) или связан с поставщиком, чьи данные обновляются.
Я не включал такие проверки уровня BLL здесь, так как в нашем учебном пособии права пользователя определяются выпадающим списком на странице, к которой классы BLL не могут получить доступ. При использовании системы членства или одной из готовых схем проверки подлинности, предоставляемых ASP.NET (например, проверка подлинности Windows), доступ к данным пользователя и информации о ролях может быть получен из BLL, что позволяет выполнять проверки прав доступа как на уровне презентации, так и на уровне BLL.
Сводка
Большинству сайтов, предоставляющих учетные записи пользователей, необходимо настроить интерфейс изменения данных на основе пользователя, вошедшего в систему. Администраторы могут удалять и изменять любую запись, в то время как пользователи, не являющиеся административными пользователями, могут быть ограничены только обновлением или удалением записей, созданных ими. Независимо от того, какой сценарий может быть, веб-элементы управления данными, классы ObjectDataSource и бизнес-логики могут быть расширены для добавления или запрета определенных функций на основе вошедшего в систему пользователя. В этом руководстве мы узнали, как ограничить просматриваемые и редактируемые данные в зависимости от того, связан ли пользователь с определенным поставщиком или если они работали для нашей компании.
В этом руководстве мы завершаем изучение вставки, обновления и удаления данных с помощью элементов управления GridView, DetailsView и FormView. Начиная со следующего руководства, мы рассмотрим добавление поддержки разбиения по страницам и сортировки.
Счастливое программирование!
Сведения о авторе
Скотт Митчелл, автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с технологиями Microsoft Web с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Изучите самостоятельно ASP.NET 2.0 за 24 часа. С ним можно связаться по адресу mitchell@4GuysFromRolla.com.