在ASP.NET 2.0中操作数据之二十三:基于用户对修改(5)

  尽管ProductsBySupplier GridView已经功能全面,它当前为来自指定供应商的用户提供了太多的访问权限。根据我们的业务规则,用户不能够更新废弃的产品。为了执行这些,当来自某个指定供应商的用户访问这个页面时,我们会在GridView中这些废弃的产品前隐藏掉编辑按钮。

  为GridView的RowDataBound事件新建一个事件处理器。在事件处理器中我们需要决定用户是否和某个供应商相关联,对于教程中,我们可以通过Suppliers这个下拉框来决定-如果不是-1,那么用户就是和当前供应商关联的。对于某些用户,我们需要决定产品是否已经废弃。我们可以通过e.Row.DataItem属性来获得一个绑定到GridView上的ProductRow实例,正如我们在在GridView的页脚显示摘要信息教程中所提及到的。如果产品过期了,我们可以使用在前面教程-为删除数据添加客户端确认中所讨论的技术,在GridView的CommandFild中获取一个编辑按钮的引用,一旦我们获得这个引用,我们就可以隐藏或者删除这个按钮。

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 Anton's Gumbo Mix对于New Orleans Cajun Delights供应商来讲是一个废弃产品。当这个供应商的用户访问这个页面时候,这个产品的编辑按钮是不可见的(见图14)。然而,当使用“显示/编辑所有供应商”访问页面时候,编辑按钮是可见的(见图15)。

/uploads/allimg/200612/1K6391912_0.png

图14:对于指定供应商用户,Chef Anton's Gumbo Mix的编辑按钮是被隐藏的

/uploads/allimg/200612/1K63c0V_0.png

图15:对于“显示/编辑所有供应商”用户,Chef Anton's Gumbo Mix的编辑按钮是可见的

在业务逻辑层中检查访问权限

  在这篇教程中,ASP.NET通过处理逻辑让用户可以访问那些信息以及哪些产品他可以更新。概念上来讲,这些逻辑也可以在业务逻辑成完成。例如,在SuppliersBLL类中的GetSuppliers()方法可以包含一个检测,以保证当前登录的用户不和一个指定的供应商相关。同样,UpdateSupplierAddress方法可以添加一个检测,确保当前登录用户既可以是来自我们公司(因此可以更新所有供应商的地址资料),或者跟一个特定的供应商相关,只能更新他的数据。在这里我不会包含任何业务逻辑层的检测代码,因为在教程中,用户的权限由页面的下拉框所决定,业务逻辑层的类代码是无法访问到的。当使用成员系统或者是ASP.NET提供的一种认证模式(比如Windows认证),当前登录用户的信息和角色信息可以通过业务逻辑层访问到,因此在那种情况下在表现层和业务层都能够进行权限判断。

总结

  大部分提供帐号的站点需要根据登录用户而定制不同的数据修改界面。管理员或许能够删除或编辑任何记录,没有管理权限的用户可能被限制只能更新或删除他们自己创建的数据。无论是哪类情况,数据web控件,ObjectDataSource,以及业务逻辑层的类可以用来扩展成基于登录用户的添加删除功能。在这篇教程中,我们看到了如果根据用户是否和某个供应商相关联,或者是为我们公司一员来限制显示和编辑数据。

  这篇教程总结了使用GridView,DetailsView,以及FormView控件来添加,更新,删除数据。从下一篇开始,我们将关注添加分页和排序的功能支持。

祝编程愉快!

作者简介

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwsy.html