Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En una aplicación web que permite a los usuarios editar datos, es posible que diferentes cuentas de usuario tengan privilegios de edición de datos diferentes. En este tutorial examinaremos cómo ajustar dinámicamente las funcionalidades de modificación de datos en función del usuario que visita.
Introducción
Una serie de aplicaciones web admiten cuentas de usuario y proporcionan diferentes opciones, informes y funcionalidades en función del usuario que ha iniciado sesión. Por ejemplo, con nuestros tutoriales podríamos permitir que los usuarios de las empresas proveedoras inicien sesión en el sitio y actualicen información general sobre sus productos , su nombre y cantidad por unidad, quizás, junto con la información de proveedor, como su nombre de empresa, dirección, la información de la persona de contacto, etc. Además, es posible que deseemos incluir algunas cuentas de usuario para personas de nuestra empresa para que puedan iniciar sesión y actualizar información del producto, como unidades en existencias, reordenar nivel, etc. Nuestra aplicación web también podría permitir que los usuarios anónimos visiten (personas que no han iniciado sesión), pero las limitarían a ver solo los datos. Con este sistema de cuentas de usuario implementado, queremos que los controles web de datos de nuestras páginas de ASP.NET ofrezcan las funcionalidades de inserción, edición y eliminación adecuadas para el usuario que ha iniciado sesión actualmente.
En este tutorial examinaremos cómo ajustar dinámicamente las funcionalidades de modificación de datos en función del usuario que visita. En concreto, crearemos una página que muestre la información de los proveedores en una Vista de detalles editable junto con una GridView que muestre los productos proporcionados por el proveedor. Si el usuario que visita la página es de nuestra empresa, puede: ver cualquier información del proveedor; editar su dirección; y edite la información de cualquier producto proporcionado por el proveedor. Sin embargo, si el usuario es de una empresa determinada, solo puede ver y editar su propia información de dirección y solo puede editar sus productos que no se han marcado como discontinuados.
Figura 1: Un usuario de nuestra empresa puede editar cualquier información del proveedor (haga clic para ver la imagen de tamaño completo)
Figura 2: Un usuario de un proveedor determinado solo puede ver y editar su información (haga clic para ver la imagen de tamaño completo)
¡Comencemos!
Nota:
ASP.NET sistema de pertenencia de 2.0 proporciona una plataforma estandarizada y extensible para crear, administrar y validar cuentas de usuario. Dado que un examen del sistema de membresía está fuera del ámbito de estos tutoriales, este tutorial, en su lugar, "finge" la membresía permitiendo a los visitantes anónimos elegir si son de un proveedor determinado o de nuestra empresa. Para obtener más información sobre la membresía, consulte la serie de artículos Examen de la membresía, los roles y el perfil de ASP.NET 2.0 .
Paso 1: Permitir que el usuario especifique sus derechos de acceso
En una aplicación web real, la información de una cuenta de usuario incluiría si trabajaban para nuestra empresa o para un proveedor determinado, y esta información sería accesible mediante programación desde nuestras páginas de ASP.NET una vez que el usuario haya iniciado sesión en el sitio. Esta información se puede capturar a través del sistema de roles de ASP.NET 2.0, como información de cuenta a nivel de usuario a través del sistema de perfiles, o por medios personalizados.
Dado que el objetivo de este tutorial es demostrar el ajuste de las funcionalidades de modificación de datos basadas en el usuario que ha iniciado sesión, y no está pensado para mostrar ASP.NET sistemas de pertenencia, roles y perfiles de 2.0, usaremos un mecanismo muy sencillo para determinar las funcionalidades para el usuario que visita la página: un DropDownList desde el que el usuario puede indicar si debería poder ver y editar cualquiera de la información de los proveedores o, como alternativa, la información del proveedor en particular que puede ver y editar. Si el usuario indica que puede ver y editar toda la información del proveedor (el valor predeterminado), puede paginar a través de todos los proveedores, editar cualquier información de dirección del proveedor y editar el nombre y la cantidad por unidad para cualquier producto proporcionado por el proveedor seleccionado. Sin embargo, si el usuario indica que solo puede ver y editar un proveedor determinado, solo puede ver los detalles y los productos de ese proveedor y solo puede actualizar el nombre y la cantidad por información de unidad para esos productos que no están descontinuados.
Nuestro primer paso en este tutorial es crear este DropDownList y rellenarlo con los proveedores del sistema. Abra la UserLevelAccess.aspx
página en la EditInsertDelete
carpeta, agregue un DropDownList cuya propiedad ID
esté establecida en Suppliers
, y enlace este DropDownList a un nuevo ObjectDataSource llamado AllSuppliersDataSource
.
Figura 3: Crear un nuevo objetoDataSource denominado AllSuppliersDataSource
(haga clic para ver la imagen de tamaño completo)
Puesto que queremos que este DropDownList incluya todos los proveedores, configure ObjectDataSource para invocar el método de la SuppliersBLL
clase s GetSuppliers()
. Asegúrese también de que el método ObjectDataSource está Update()
asignado al método de la SuppliersBLL
clase s UpdateSupplierAddress
, ya que el elemento DetailsView también usará esta clase ObjectDataSource que agregaremos en el paso 2.
Después de completar el asistente ObjectDataSource, complete los pasos mediante la configuración de Suppliers
DropDownList de modo que muestre el CompanyName
campo de datos y use el SupplierID
campo de datos como valor para cada ListItem
.
Figura 4: Configurar dropDownList Suppliers
para usar los CompanyName
campos de datos y SupplierID
(haga clic para ver la imagen de tamaño completo)
En este momento, dropDownList enumera los nombres de empresa de los proveedores de la base de datos. Sin embargo, también es necesario incluir una opción "Mostrar o editar todos los proveedores" en dropDownList. Para ello, establezca la propiedad Suppliers
del AppendDataBoundItems
DropDownList en true
y agregue un ListItem
cuya propiedad Text
sea "Show/Edit ALL Suppliers" y cuyo valor sea -1
. Esto se puede agregar directamente a través del marcado declarativo o mediante el Diseñador. Para hacerlo, vaya a la ventana de Propiedades y haga clic en los puntos suspensivos ubicados junto a la propiedad DropDownList.Items
Nota:
Consulte el tutorial Master/Detail Filtering With a DropDownList (Filtrado de maestros y detalles con una lista desplegable ) para obtener una explicación más detallada sobre cómo agregar un elemento Select All a un dropDownList de entrada de datos.
Una vez establecida la AppendDataBoundItems
propiedad y ListItem
agregada, el marcado declarativo de DropDownList debe ser similar al siguiente:
<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>
En la figura 5 se muestra una captura de pantalla del progreso actual, cuando se ve a través de un explorador.
Figura 5: La Suppliers
lista desplegable contiene una opción para mostrar todo ListItem
, además de una para cada proveedor (haga clic para ver la imagen de tamaño completo)
Puesto que queremos actualizar la interfaz de usuario inmediatamente después de que el usuario haya cambiado su selección, establezca la propiedad Suppliers
de AutoPostBack
DropDownList en true
. En el paso 2, crearemos un control DetailsView que mostrará la información de los proveedores en función de la selección DropDownList. A continuación, en el paso 3, crearemos un controlador de eventos para este evento DropDownList SelectedIndexChanged
, en el que agregaremos código que enlaza la información de proveedor adecuada a DetailsView en función del proveedor seleccionado.
Paso 2: Agregar un control DetailsView
Vamos a usar detailsView para mostrar la información del proveedor. Para el usuario que puede ver y editar todos los proveedores, DetailsView admitirá la paginación, lo que permite al usuario recorrer la información de proveedor un registro cada vez. Sin embargo, si el usuario trabaja para un proveedor determinado, detailsView mostrará solo esa información del proveedor en particular y no incluirá una interfaz de paginación. En cualquier caso, DetailsView debe permitir al usuario editar los campos de dirección, ciudad y país del proveedor.
Agregue un DetailsView a la página debajo de Suppliers
DropDownList, establezca su propiedad ID
en SupplierDetails
y vincúlela al ObjectDataSource AllSuppliersDataSource
creado en el paso anterior. A continuación, active las casillas Habilitar paginación y Habilitar edición en la etiqueta inteligente DetailsView.
Nota:
Si no ve una opción Habilitar edición en la etiqueta inteligente DetailsView, se debe a que no ha asignado el método ObjectDataSource s Update()
al método de la SuppliersBLL
clase s UpdateSupplierAddress
. Tómese un momento para volver atrás y realizar este cambio de configuración, después de lo cual la opción Habilitar edición debería aparecer en la etiqueta inteligente DetailsView s.
Dado que el método de la SuppliersBLL
clase s UpdateSupplierAddress
solo acepta cuatro parámetros : supplierID
, address
, city
y country
, modifica detailsView s BoundFields para que y CompanyName
Phone
BoundFields sean de solo lectura. Además, elimine el SupplierID
BoundField por completo. Por último, la AllSuppliersDataSource
ObjectDataSource actualmente tiene su propiedad OldValuesParameterFormatString
establecida en original_{0}
. Dedique un momento a quitar esta configuración de propiedad de la sintaxis declarativa por completo o establézcala en el valor predeterminado, {0}
.
Después de SupplierDetails
configurar DetailsView y AllSuppliersDataSource
ObjectDataSource, tendremos el siguiente marcado declarativo:
<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>
En este momento, el DetailsView puede paginarse y actualizarse la información de dirección del proveedor seleccionado, independientemente de la selección realizada en Suppliers
DropDownList (consulte la Figura 6).
Figura 6: Se puede ver cualquier información de proveedores y su dirección actualizada (haga clic para ver la imagen de tamaño completo)
Paso 3: Mostrar solo la información del proveedor seleccionado
Nuestra página muestra actualmente la información de todos los proveedores independientemente de si se ha seleccionado un proveedor determinado en DropDownList Suppliers
. Para mostrar solo la información del proveedor para el proveedor seleccionado, necesitamos agregar otro ObjectDataSource a nuestra página, uno que recupera información sobre un proveedor determinado.
Agregue un nuevo ObjectDataSource a la página y asígnele el nombre SingleSupplierDataSource
. En su etiqueta inteligente, haga clic en el vínculo Configurar origen de datos y haga que use el método de la SuppliersBLL
clase s GetSupplierBySupplierID(supplierID)
. Al igual que con AllSuppliersDataSource
ObjectDataSource, tenga el método SingleSupplierDataSource
de ObjectDataSource asignado al método de la clase Update()
SuppliersBLL
.
Figura 7: Configurar objectDataSource SingleSupplierDataSource
para usar el método (GetSupplierBySupplierID(supplierID)
imagen de tamaño completo)
A continuación, se le pedirá que especifique el origen del parámetro para el GetSupplierBySupplierID(supplierID)
parámetro de entrada del supplierID
método. Puesto que queremos mostrar la información del proveedor seleccionado en DropDownList, use la Suppliers
propiedad DropDownList s SelectedValue
como origen del parámetro.
Figura 8: Usar dropDownList Suppliers
como origen de parámetros (supplierID
imagen de tamaño completo)
Incluso con este segundo ObjectDataSource agregado, el control DetailsView está configurado actualmente para usar siempre el AllSuppliersDataSource
ObjectDataSource. Es necesario agregar lógica para ajustar el origen de datos usado por DetailsView en función del Suppliers
elemento DropDownList seleccionado. Para ello, cree un controlador de eventos para el DropDownList de Proveedores. Esto se puede crear con más facilidad haciendo doble clic en DropDownList en el Diseñador. Este controlador de eventos debe determinar qué origen de datos usar y debe volver a enlazar los datos a DetailsView. Esto se logra con el código siguiente:
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
El controlador de eventos comienza por determinar si se seleccionó la opción "Mostrar o editar todos los proveedores". Si es así, establece el SupplierDetails
DetailsView en DataSourceID
y devuelve al usuario al primer registro del conjunto de proveedores estableciendo la propiedad AllSuppliersDataSource
en 0. Sin embargo, si el usuario ha seleccionado un proveedor determinado de DropDownList, detailsView s DataSourceID
se asigna a SingleSuppliersDataSource
. Independientemente del origen de datos que se use, el SuppliersDetails
modo se revierte al modo de solo lectura y los datos se vuelven a enlazar a DetailsView mediante una llamada al método SuppliersDetails
del control DataBind()
.
Con este controlador de eventos en su lugar, el control DetailsView ahora muestra el proveedor seleccionado, a menos que se haya seleccionado la opción "Mostrar/Editar todos los proveedores", en cuyo caso todos los proveedores se pueden ver a través de la interfaz de paginación. La figura 9 muestra la página con la opción "Mostrar/Editar TODOS los proveedores" seleccionada; tenga en cuenta que la interfaz de paginación está presente, lo que permite al usuario visitar y actualizar cualquier proveedor. En la figura 10 se muestra la página con el proveedor ma Maison seleccionado. Solo la información de Ma Maison es visible y editable en este caso.
Figura 9: Toda la información de proveedores se puede ver y editar (haga clic para ver la imagen de tamaño completo)
Figura 10: Solo se puede ver y editar la información del proveedor seleccionado (haga clic para ver la imagen de tamaño completo)
Nota:
Para este tutorial, los controles EnableViewState
DropDownList y DetailsView deben establecerse en true
(el valor predeterminado) porque los cambios de la propiedad DropDownList y SelectedIndex
DetailsView DataSourceID
deben recordarse entre postbacks.
Paso 4: Enumerar los productos de los proveedores en un GridView editable
Con detailsView completado, nuestro siguiente paso es incluir una GridView editable que enumera los productos proporcionados por el proveedor seleccionado. Esta clase de GridView debe permitir ediciones solo en los campos ProductName
y QuantityPerUnit
. Además, si el usuario que visita la página es de un proveedor determinado, solo debe permitir actualizaciones a esos productos que no están descontinuados. Para lograr esto, primero será necesario agregar una sobrecarga al método de la clase ProductsBLL
que tome solo los campos UpdateProducts
, ProductID
y ProductName
como entradas. Hemos recorrido este proceso de antemano en numerosos tutoriales, así que echemos un vistazo al código aquí, que se debe agregar a 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
Con esta sobrecarga creada, estamos listos para agregar el control GridView y su objectDataSource asociado. Agregue un nuevo GridView a la página, establezca su propiedad ID
en ProductsBySupplier
, y configúrelo para usar un nuevo ObjectDataSource denominado ProductsBySupplierDataSource
. Puesto que queremos que gridView muestre esos productos por el proveedor seleccionado, use el método de la ProductsBLL
clase s GetProductsBySupplierID(supplierID)
. Asigne también el Update()
método a la nueva UpdateProduct
sobrecarga que acabamos de crear.
Figura 11: Configurar objectDataSource para usar la sobrecarga recién creada (UpdateProduct
la imagen de tamaño completo)
Se le pedirá que seleccione el origen del parámetro para el GetProductsBySupplierID(supplierID)
parámetro de entrada del supplierID
método. Dado que queremos mostrar los productos del proveedor seleccionado en el control DetailsView, use la propiedad del control SuppliersDetails
DetailsView SelectedValue
como origen del parámetro.
Figura 12: Usar la SuppliersDetails
propiedad DetailsView s SelectedValue
como origen del parámetro (haga clic para ver la imagen de tamaño completo)
Volviendo al GridView, quite todos los campos del GridView, excepto ProductName
, QuantityPerUnit
, y Discontinued
, marcando el CheckBoxField Discontinued
como de solo lectura. Además, active la opción Habilitar edición en la etiqueta inteligente de GridView. Una vez realizados estos cambios, el marcado declarativo para GridView y ObjectDataSource debe tener un aspecto similar al siguiente:
<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>
Al igual que con nuestros anteriores ObjectDataSources, la propiedad de este se OldValuesParameterFormatString
establece en original_{0}
, lo que provocará problemas al intentar actualizar el nombre de un producto o su cantidad por unidad. Quite esta propiedad de la sintaxis declarativa por completo o establézcala en su valor predeterminado, {0}
.
Con esta configuración completa, nuestra página muestra ahora los productos proporcionados por el proveedor seleccionado en GridView (vea la figura 13). Actualmente, se puede actualizar cualquier nombre o cantidad del producto por unidad. Sin embargo, es necesario actualizar la lógica de la página para que dicha funcionalidad esté prohibida para los productos discontinuos para los usuarios asociados a un proveedor determinado. Abordaremos esta última pieza en el paso 5.
Figura 13: Los productos proporcionados por el proveedor seleccionado se muestran (haga clic para ver la imagen de tamaño completo)
Nota:
Con la adición de este GridView editable, se debe actualizar el controlador de eventos Suppliers
DropDownList SelectedIndexChanged
para que el GridView vuelva a un estado de solo lectura. De lo contrario, si se selecciona un proveedor diferente mientras se encuentra en medio de la edición de información del producto, también se podrá editar el índice correspondiente en GridView para el nuevo proveedor. Para evitar esto, simplemente establezca la propiedad de GridView en EditIndex
en el controlador de eventos -1
.SelectedIndexChanged
Además, recuerde que es importante que el estado de vista de GridView esté habilitado (el comportamiento predeterminado). Si establece la propiedad EnableViewState
de GridView en false
, corre el riesgo de que los usuarios simultáneos eliminen o editen registros accidentalmente.
Paso 5: No permitir la edición de productos discontinuos cuando no se selecciona Mostrar o editar todos los proveedores
ProductsBySupplier
Aunque GridView es totalmente funcional, actualmente concede demasiado acceso a los usuarios que proceden de un proveedor determinado. Según nuestras reglas de negocio, estos usuarios no deben poder actualizar los productos descontinuados. Para aplicar esto, podemos ocultar (o deshabilitar) el botón Editar en esas filas de GridView con productos descontinuados cuando un usuario visita la página de un proveedor.
Cree un controlador de eventos para el evento RowDataBound
de GridView. En este controlador de eventos, es necesario determinar si el usuario está asociado a un proveedor determinado, que, para este tutorial, se puede determinar comprobando la propiedad Proveedores DropDownList , SelectedValue
si es algo distinto de -1, el usuario está asociado a un proveedor determinado. Para estos usuarios, entonces es necesario determinar si el producto está o no descontinuado. Podemos obtener una referencia a la instancia real ProductRow
enlazada a la fila GridView a través de la propiedad e.Row.DataItem
, como se describe en el tutorial Mostrar información de resumen en el pie de página del GridView. Si el producto está descontinuado, podemos obtener una referencia mediante programación al botón Editar del commandField de GridView mediante las técnicas descritas en el tutorial anterior, Agregar Client-Side confirmación al eliminar. Una vez que tengamos una referencia, podemos ocultar o deshabilitar el botón.
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
Con este controlador de eventos en su lugar, al visitar esta página como usuario de un proveedor específico, los productos descontinuados no son editables, ya que el botón Editar está oculto para estos productos. Por ejemplo, Chef Anton s Gumbo Mix es un producto discontinuo para el proveedor New Orleans Cajun Delights. Al visitar la página de este proveedor en particular, el botón Editar para este producto está oculto a la vista (vea la figura 14). Sin embargo, al visitar el botón "Mostrar/editar todos los proveedores", el botón Editar está disponible (vea la figura 15).
Figura 14: Para Supplier-Specific Usuarios el botón Editar para Chef Anton s Gumbo Mix está oculto (haga clic para ver la imagen de tamaño completo)
Figura 15: Para Mostrar o editar todos los proveedores Usuarios, se muestra el botón Editar para Chef Anton s Gumbo Mix (Haga clic para ver la imagen de tamaño completo)
Comprobación de los derechos de acceso en la capa de lógica de negocios
En este tutorial, la página ASP.NET controla toda la lógica con respecto a la información que el usuario puede ver y qué productos puede actualizar. Idealmente, esta lógica también estaría presente en la capa lógica de negocios. Por ejemplo, el método de la SuppliersBLL
clase s GetSuppliers()
(que devuelve todos los proveedores) puede incluir una comprobación para asegurarse de que el usuario que ha iniciado sesión no está asociado a un proveedor específico. Del mismo modo, el UpdateSupplierAddress
método podría incluir una comprobación para asegurarse de que el usuario que ha iniciado sesión ha trabajado para nuestra empresa (y, por lo tanto, puede actualizar toda la información de direcciones de proveedores) o está asociado con el proveedor cuyos datos se están actualizando.
No he incluido estas comprobaciones de nivel BLL aquí porque en nuestro tutorial los derechos del usuario están determinados por un DropDownList en la página, a la que las clases BLL no pueden acceder. Al usar el sistema de membresía o uno de los esquemas de autenticación integrados proporcionados por ASP.NET (por ejemplo, la autenticación de Windows), se puede acceder a la información del usuario y a los roles del usuario actualmente iniciado sesión desde la BLL, lo que hace que dichas comprobaciones de derechos de acceso sean posibles en las capas de presentación y BLL.
Resumen
La mayoría de los sitios que proporcionan cuentas de usuario deben personalizar la interfaz de modificación de datos en función del usuario que ha iniciado sesión. Los usuarios administrativos pueden eliminar y editar cualquier registro, mientras que los usuarios que no son administrativos pueden limitarse solo a actualizar o eliminar los registros que crearon. Sea cual sea el escenario, se pueden ampliar los controles web de datos, las clases ObjectDataSource, y las clases de la Capa de Lógica de Negocio para agregar o denegar determinadas funcionalidades basadas en el usuario que ha iniciado sesión. En este tutorial vimos cómo limitar los datos visibles y editables en función de si el usuario estaba asociado a un proveedor determinado o si trabajaba para nuestra empresa.
En este tutorial se concluye el examen de la inserción, actualización y eliminación de datos mediante los controles GridView, DetailsView y FormView. A partir del siguiente tutorial, nos centraremos en agregar soporte para paginación y ordenación.
¡Feliz programación!
Acerca del autor
Scott Mitchell, autor de siete libros de ASP/ASP.NET y fundador de 4GuysFromRolla.com, ha estado trabajando con tecnologías web de Microsoft desde 1998. Scott trabaja como consultor independiente, entrenador y escritor. Su último libro es Sams Teach Yourself ASP.NET 2.0 en 24 horas. Se puede contactar con él en mitchell@4GuysFromRolla.com.