《电子商务网站建设与管理》课件-项目四_第1页
《电子商务网站建设与管理》课件-项目四_第2页
《电子商务网站建设与管理》课件-项目四_第3页
《电子商务网站建设与管理》课件-项目四_第4页
《电子商务网站建设与管理》课件-项目四_第5页
已阅读5页,还剩39页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【项目导读】完善的电子商务网站就像一个ERP系统一样,除了可以在网站里实现订单管理、物流管理、财务管理等诸多功能,还要求有比较完备的后台管理系统。电子商务网站后台的功能主要有用户管理、商品管理、新闻管理等,其中用户管理与商品管理在后台管理中尤为显得重要。通过对用户管理系统和商品管理系统的设计与实现,要求学生掌握电子商务系统中用户信息的管理和权限的分配,掌握商品的分类和添加删除等的管理。项目四共有两个任务:任务一:用户管理系统的设计与实现任务二:商品管理系统的设计与实现【关键词】后台管理、用户管理、权限分配、访问控制、商品管理任务一用户管理系统设计与实现任务目标1.掌握用户的登录、以及登录时产生的票据来保存用户的状态2.掌握票据中角色的处理,并根据角色控制访问权限3.掌握用户权限的分配以及访问权限的控制任务描述电子商务后台管理中用户的登录、用户的注册;用户的权限的分配,访问权限的控制等。[任务知识]一、用户的登录用户登录解决的问题是通过用户名和密码获得合法的后台管理的权限,登录后,根据用户的角色权限使用相对应的页面二、用户的注册填写用户相关信息进行注册,在用户表中添加用户相关信息,然后由系统管理员分配相应的权限,是的注册的用户可以使用相应的子系统或页面。三、访问权限的控制子系统只允许具备权限的用户或角色进行访问,而拒绝不具备权限的用户访问。四、用户权限的分配系统管理员分配新注册的用户相对应的权限,可以允许新注册的用户访问相应的子系统或页面。任务实施用户管理基于表UserInfo和表AdminRole,表UserInfo任务实施用户管理基于表UserInfo和表AdminRole,表AdminRole任务实施步骤一、建立用户登录页面任务实施步骤一、建立用户登录页面登录成功后,获取用户角色核心代码:stringRoleName=GetRoleName(tbUser.Rows[0]["RoleID"].ToString());FormsAuthenticationTicketmyTicket= newFormsAuthenticationTicket(1, tbUser.Rows[0]["UserID"].ToString(), DateTime.Now, DateTime.Now.AddMinutes(20), true, RoleName, FormsAuthentication.FormsCookieName);stringhashTicket=FormsAuthentication.Encrypt(myTicket);//用于创建加密的ticket对象HttpCookieuserCookie=newHttpCookie(FormsAuthentication.FormsCookieName,hashTicket);Response.Cookies.Add(userCookie);Response.Redirect("Manager/UserList.aspx");任务实施步骤一、建立用户登录页面使用Forms验证存储用户自定义信息Forms验证在内部的机制为把用户数据加密后保存在一个基于cookie的票据FormsAuthenticationTicket中,因为是经过特殊加密的,所以应该来说是比较安全的。而.net除了用这个票据存放自己的信息外,还留了一个地给用户自由支配,这就是现在要说的UserData。UserData可以用来存储string类型的信息,并且也享受Forms验证提供的加密保护,当我们需要这些信息时,也可以通过简单的get方法得到,兼顾了安全性和易用性,用来保存一些必须的敏感信息还是很有用的

下面是FormsAuthenticationTicket构造函数的重载之一的方法签名

publicFormsAuthenticationTicket(

intversion,

stringname,

DateTimeissueDate,

DateTimeexpiration,

boolisPersistent,

stringuserData

);

参数

:version

,版本号。

Name,与身份验证票关联的用户名。

issueDate,Cookie的发出时间。

Expiration,Cookie的到期日期。

isPersistent,如果Cookie是持久的,为true;否则为false。

userData

,将存储在Cookie中的用户定义数据

使用userdata也很简单,FormsIdentity的Ticket属性就提供了对当前票据的访问,获得票据后就可以用UserData属性访问保存的信息,当然是经过解密的。如果需要存储角色,userData使用roles,角色字符串,角色之间可以用分隔符隔开,如“,”,例如“sales,manager”。

本例中,用户角色是单一角色,如果是多重角色,则获取角色的方法需要重写。任务实施步骤二、建立用户注册页面用户注册页面的设计与其他表单页面一致,在此不再赘述。需要注意的是,注册页面也需要放置在主目录下,与Login页面在同一目录。步骤三、控制登录后的用户访问将允许某角色访问的文件放置在某文件夹内,控制文件夹的访问权限,即可以控制用户的访问权限。任务实施步骤三、控制登录后的用户访问将允许某角色访问的文件放置在某文件夹内,控制文件夹的访问权限,即可以控制用户的访问权限。首先,需要在文件夹内添加一个配置文件web.config<?xmlversion="1.0"?><configuration><system.web><authorization><allowroles="manager,sales"/><denyusers="*"/></authorization></system.web></configuration>此配置文件中,allow表示允许某种角色的用户访问,deny表示拒绝某种角色的用户访问,“*”表示所有用户,“?”表示匿名用户,此文件表示拒绝除了角色为manager和Salesman的所有用户。任务实施步骤三、控制登录后的用户访问将允许某角色访问的文件放置在某文件夹内,控制文件夹的访问权限,即可以控制用户的访问权限。其次,要在根目录下的Web.config文件中的System.Web节中配置<roleManager>节。<roleManagerdefaultProvider="MyProvider"enabled="true"><providers><addname="MyProvider"type="WebAppDataBind.MyRoleProvider"/></providers></roleManager>其中type的值为处理角色文件的类名,包括命名空间。任务实施步骤三、控制登录后的用户访问将允许某角色访问的文件放置在某文件夹内,控制文件夹的访问权限,即可以控制用户的访问权限。最后,要创建处理角色的类,类要继承(实现)抽象类RoleProvider,实现类中方法GetRolesForUser,此方法是从票据中获取用户信息,并分解成角色数组。publicoverridestring[]GetRolesForUser(stringusername){FormsIdentityId=HttpContext.Current.User.IdentityasFormsIdentity;if(Id!=null){returnId.Ticket.UserData.Split(',');}returnnull;}任务实施步骤四、系统管理员分配用户角色权限由以上访问控制机制处理后,用户登录后,角色符合条件就可以访问UserList页面。此页面是用户列表(简化版)此页面使用的GridView控件呈现用户列表,前台文件为UserList.aspx,代码略任务实施步骤四、系统管理员分配用户角色权限<ItemTemplate><asp:LabelID="Label3"runat="server"Text='<%#GetRoleName(Eval("RoleID").ToString())%>'></asp:Label></ItemTemplate>其中,UserInfo表中只有RoleID,没有RoleName,而希望页面呈现出来的是RoleName,则需要进行处理,根据RoleID,从AdminRole表中获取RoleName,代码如下:publicstringGetRoleName(stringRoleID){//根据配置文件中的节,获取连接字符串

stringstrCon=ConfigurationManager.ConnectionStrings["eshopConnection"].ToString();SqlConnectioncn=newSqlConnection(strCon);stringstrSelect="select*fromAdminRolewhereRoleID=@rid";SqlCommandcmd=newSqlCommand(strSelect,cn);cmd.Parameters.AddWithValue("@rid",RoleID);cn.Open();SqlDataReaderdr=cmd.ExecuteReader();if(dr.Read()){returndr["RoleName"].ToString();}else{return"";}}注意的是,此方法的修饰符必须为public,否则在页面无法调用而出错。任务检查与评价

1、任务成果:完成用户管理的所有功能,包括用户密码的修改与找回、用户的注册等功能。2、任务展示:根据用户管理的流程,将用户管理的所有功能展示出来;还要求将用户分成若干不同类型用户,如:一般用户、会员、后台管理员、平台管理员等。3、任务评价:能完成用户管理的整个流程,并能够有效地控制权限管理,能有效地防范简单的攻击,如,直接输入URL,能够控制没有权限的用户无法访问。巩固与拓展

[拓展任务]1、对用户的密码进行加密,使用不可逆的加密,有效保护用户的口令。不可逆的加密算法常用的是MD5加密。2、能够根据用户的角色,自动转到相对应的访问页面。3、根据用户回答的密码提示问题,帮助用户找回密码。4、实现更加精细化的权限控制,如,某个用户能访问某个文件夹下的某些页面,而另外一些页面则拒绝访问。5、对GridView控件进行分页操作等。【项目小结】

通过本项目的学习,掌握了用户验证码的使用,掌握用户管理系统的功能模块的相关知识,掌握了页面之间传递参数的一种机制,掌握了使用Forms验证机制实现了权限访问控制的处理。【知识技能训练】1、简述使用票据机制来实现权限访问控制的方法和步骤。任务二商品管理系统设计与实现任务目标:1.掌握Repeater控件的使用2.掌握商品类别的添加与修改3.掌握商品信息的添加与修改,着重掌握图片的上传与管理任务描述商品管理系统主要是针对商品的基本信息、仓储信息等进行管理。包括商品的分类、商品的库存查询、商品的销售查询、商品信息的添加修改等。其中商品的库存查询、销售查询在电子商务后台管理中尤为显得重要,可以帮助用户了解商品的销售情况,是否需要进货,以及进货的频率或数量的问题。商品基本信息的管理决定着商品陈列的效果,特别是图片的处理,因此本任务中的一个重点就是关于商品陈列照片的上传与管理。[任务知识]

一、使用Repeater控件对商品分类列表进行管理和控制Repeater这个单词是重复器的意思,这个名字很形象地体现了Repeater控件的数据呈现方式:不断重复数据。Repeater比DataList更为开放和灵活,我们仅仅需要配置一行数据的呈现方式,Repeater会自动“重复”生成其余行。二、商品信息的添加与修改。三、使用文件上传控件对图片进行上传和管理。文件上传控件在实际的应用中出现的频率非常高。我们知道,对于WEB应用程序,服务端和客户端交互文件的方法只能上传和下载。出于安全,对于上传,程序不可能给出一个类似WINDOWS应用程序的文件选取框让用户选择多个文件上传,唯一的办法就是让用户自己从电脑上选择合适的文件;四、使用Repeater展示商品信息。任务实施商品信息表ProductInfo和商品分类表Category任务实施步骤一、使用Repeater对商品类别进行管理1、创建商品类别管理的页面,效果图如下:我们首先来建立页眉和脚注模板。这些模板中的内容不参与“循环”,我们可以把表的表头部分和结束部分放在里面。代码略任务实施步骤一、使用Repeater对商品类别进行管理我们首先引入了一个<table>的表头并设置了一些样式。在表格的第一行中,我们放了一个用来填写新增分类的名字的文本框,一个用来实现新增分类操作的按钮。Repeater中的所有按钮被点击后都会触发ItemCommand事件,因此我们需要为每个按钮设置一个CommandName以区分。在脚注模板中我们结束了<table>标签。现在转换到设计视图,点击Repeater然后选择属性窗口中的“闪电”图标切换到Repeater的事件。在ItemCommand事件后双击,IDE自动为我们创建了Repeater的ItemCommand事件处理方法,我们直接向其中填写代码完成新建分类操作(不要忘记usingSystem.Data.SqlClient):任务实施步骤一、使用Repeater对商品类别进行管理if(e.CommandName=="AddCategory"){RepeaterItemri=e.Item;TextBoxtb=ri.FindControl("tb_NewCategoryName")asTextBox;stringstrCon=ConfigurationManager.ConnectionStrings["eshopConnection"].ToString();SqlConnectioncn=newSqlConnection(strCon);cn.Open();SqlCommandcmd=newSqlCommand("insertintoCategory(CategoryName)values(@CategoryName)",cn);cmd.Parameters.AddWithValue("@CategoryName",tb.Text);cmd.ExecuteNonQuery();SetBind();}任务实施步骤一、使用Repeater对商品类别进行管理我们从e.Item中得到一个RepeaterItem,然后就能使用它查找事件触发所在行的控件了。从文本框中读取的数据即是用户想添加的新分类名,直接使用SQL语句进行插入操作。在插入操作后,我们需要重新绑定Repeater呈现结果。接下来建立SetBind()方法。由于我们在页面首次加载的时候也需要Repeater显示数据,因此页面的Page_Load()方法应该也调用SetBind():protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { SetBind(); } }任务实施步骤一、使用Repeater对商品类别进行管理privatevoidSetBind(){stringstrCon=ConfigurationManager.ConnectionStrings["eshopConnection"].ToString();SqlConnectioncn=newSqlConnection(strCon);stringstrSelect=String.Format("select*fromCategory");SqlDataAdapterda=newSqlDataAdapter(strSelect,cn);DataTabledt=newDataTable();da.Fill(dt);repCategory.DataSource=dt;repCategory.DataBind();}任务实施步骤一、使用Repeater对商品类别进行管理下面,我们可以正式开始添加Repeater的ItemTemplate(循环体)。主要是完成对分类的添加、删除和修改。此处代码写在ItemTemplate内<ItemTemplate><trstyle="background-color:#f0f0f0"><td><asp:ButtonID="btn_DelCategory"runat="server"CommandArgument='<%#Eval("CategoryID")%>'CommandName="DelCategory"Text="×删除分类"OnClientClick="returnconfirm('确实删除分类吗?')"/><asp:TextBoxID="tb_CategoryName"runat="server"Text='<%#Eval("CategoryName")%>'/><asp:ButtonID="btn_ModifyCategory"runat="server"CommandArgument='<%#Eval("CategoryID")%>'CommandName="ModifyCategory"Text="√修改分类"/></td></tr></ItemTemplate>任务实施步骤一、使用Repeater对商品类别进行管理两个按钮的CommandArgument属性都绑定了表的Class字段。修改和删除分类操作的代码如下:if(e.CommandName=="DelCategory"){SqlCommandcmd=newSqlCommand("deleteCategorywhereCategoryID=@CategoryID",cn);cmd.Parameters.AddWithValue("@CategoryID",e.CommandArgument);cmd.ExecuteNonQuery();SetBind();}if(e.CommandName=="ModifyCategory"){RepeaterItemri=e.Item;TextBoxtb=ri.FindControl("tb_CategoryName")asTextBox;SqlCommandcmd=newSqlCommand("updateCategorysetCategoryName=@CategoryNamewhereCategoryID=@CategoryID",cn);cmd.Parameters.AddWithValue("@CategoryName",tb.Text);cmd.Parameters.AddWithValue("@CategoryID",e.CommandArgument);cmd.ExecuteNonQuery();SetBind();}任务实施步骤二、对商品信息进行添加、删除和修改后台代码:首先将商品类别绑定至下拉列表框protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){BindDropDownList();}}任务实施步骤二、对商品信息进行添加、删除和修改privatevoidBindDropDownList(){stringstrCon=ConfigurationManager.ConnectionStrings["eshopConnection"].ToString();SqlConnectioncn=newSqlConnection(strCon);stringstrcmd="select*fromcategory";SqlDataAdapterda=newSqlDataAdapter(strcmd,cn);DataTabledt=newDataTable();da.Fill(dt);ddlCategory.DataSource=dt;ddlCategory.DataTextField="CategoryName";ddlCategory.DataValueField="CategoryID";ddlCategory.DataBind();}任务实施步骤二、对商品信息进行添加、删除和修改privatevoidBindDropDownList(){stringstrCon=ConfigurationManager.ConnectionStrings["eshopConnection"].ToString();SqlConnectioncn=newSqlConnection(strCon);stringstrcmd="select*fromcategory";SqlDataAdapterda=newSqlDataAdapter(strcmd,cn);DataTabledt=newDataTable();da.Fill(dt);ddlCategory.DataSource=dt;ddlCategory.DataTextField="CategoryName";ddlCategory.DataValueField="CategoryID";ddlCategory.DataBind();}任务实施步骤三、使用文件上传控件FileUpload,上传图片首先,我们来实现一个基本的上传操作。从工具箱中拖一个FileUpload控件和一个Button控件到页面上,并把按钮的Text属性设置为“上传”(FileUpload的ID设置为myFile,按钮的ID设置为btnUpload)。为了能更清晰地看到上传控件中显示的内容,我们把它的Width属性设置为400px。基本的效果如下: protectedvoidbtnUpload_Click(objectsender,EventArgse) { if(myFile.HasFile) { stringstrFileName=myFile.FileName; myFile.SaveAs(Server.MapPath(strFileName)); } else{ Response.Write("请选择您要上传的文件"); } }任务实施步骤三、使用文件上传控件FileUpload,上传图片在这里,我们之所以使用FileUpload.HasFile属性而不使用strFileName来判断用户是否选择了文件是因为HasFile还能考虑到文件为0字节的情况并把这种情况视为没有选择任何文件。注意:如果ASP.NET账户对于上传目录(在这里就是程序所在文件夹)没有写入权限系统将抛出“对XXX目录的访问被拒绝”异常,你可以通过为文件夹添加一个everyone账户并授予写入权限来解决。任务实施步骤四、使用Repeater对商品信息进行展示使用Repeater完成商品信息的展示。效果图如下。任务实施步骤四、使用Repeater对商品信息进行展示

DataTablerecordList=newDataTable(); staticintCategoryID=0;protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){CurrentIndex=0;BindRepeaterData(CategoryID);}if(Request.QueryString["CategoryID"]!=null){CategoryID=int.Parse(Request.QueryString["CategoryID"].ToString());BindRepeaterData(CategoryID);} ……}任务实施步骤四、使用Repeater对商品信息进行展示

privatevoidBindRepeaterData(intCategoryID){PagedDataSourcepds=newPagedDataSource();if(CategoryID==0){pds.DataSource=GetProductInfo();}else{pds.DataSource=GetProductInfoByCategoryID(String.Format("CategoryID={0}",Categ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论