管理者特区设置模块.docx
- 文档编号:5409025
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:36
- 大小:133.36KB
管理者特区设置模块.docx
《管理者特区设置模块.docx》由会员分享,可在线阅读,更多相关《管理者特区设置模块.docx(36页珍藏版)》请在冰豆网上搜索。
管理者特区设置模块
第21章管理者特区设置模块
管理者特区包括的内容,只有管理员角色的员工才可以查看。
在管理者特区,可以进行部门、考勤时间和权限管理等一些基础设置,还可以发布公告。
整个模块的流程如图21-1所示。
图21-1管理者特区设置模块流程图
21.1使用MultiView控件设置权限
在VS2005中,可以使用.NET配置工具实现用户和角色的添加,这种情况下不需任何代码。
本章将介绍,如何使用代码实现用户和角色的管理。
在权限管理中,为了版面简洁直观,将角色和用户放在一个MultiView控件内。
21.1.1管理角色
根据需求,将本例角色分为三类:
管理员、财务人员和普通员工。
下面将介绍如何添加角色。
(1)在网站根目录下,新建一个文件夹,命名为“controls”,用于存放用户控件。
(2)在“controls”文件夹下,添加一个用户控件,命名为“RoleManager”。
并在其中添加一个MultiView控件和三个View控件。
第一个View用来设置角色,第二个设置用户,第三个赋予用户角色。
(3)在View1中,添加控件,如图21-2所示。
主要功能是添加角色和删除角色。
在删除角色时,要设置下拉框的数据源,让用户通过选择来设置要删除的某个角色。
图21-2角色管理界面控件图
(4)为功能添加代码,如清单21-1所示。
代码清单21-1添加和删除角色的操作代码
protectedvoidPage_Load(objectsender,EventArgse)
{
//必须是页面第一次加载时才进行设置
if(!
Page.IsPostBack)
{
//临时代码,设置默认View。
MultiView1.ActiveViewIndex=0;
//先屏蔽正确代码
//MultiView1.ActiveViewIndex=int.Parse(Request.QueryString["ActiveIndex"].ToString());
//获取所有角色信息
string[]myroles=Roles.GetAllRoles();
//将角色信息添加到下拉框
ddlrole.DataSource=myroles;
//绑定数据内容
ddlrole.DataBind();
}
}
protectedvoidButton1_Click(objectsender,EventArgse)
{
//创建角色,调用方法,方法不返回任何内容
Roles.CreateRole(txtrolename.Text);
//重新绑定数据
ReDataBind();
}
protectedvoidButton2_Click(objectsender,EventArgse)
{
//删除角色,调用方法,返回是否成功
boolresult;
result=Roles.DeleteRole(ddlrole.SelectedValue);
//如果删除成功,重新绑定数据
if(result)
ReDataBind();
}
//添加或删除角色后,为ddlrole重新绑定数据源
privatevoidReDataBind()
{
ddlrole.DataSource=Roles.GetAllRoles();
ddlrole.DataBind();
}
为了体现网站的权限架构,本实例将不同权限的Web窗体放在不同的文件夹下。
现在来测试角色设置是否成功。
(1)在网站根目录下,新建一个文件夹“ManagerArea”,用来存放管理者特区的所有设置。
在其下添加一个Web窗体,命名为“RolePage”。
(2)将控件RoleManager.ascx拖放到RolePage的Content内。
此时只有一个角色设置的功能。
(3)保存页面,并将其设置为起始页。
此时按F5运行页面,会提示错误“未启用角色管理器功能”。
因为ASP.NET应用程序要启用角色管理,必须设置Web.config文件。
打开Web.config文件,在system.web节下,添加一行设置:
此时运行页面,查看角色的添加和删除是否成功。
21.1.2管理用户
ASP.NET2.0提供一个创建用户的控件“CreateUserWizard”,本例用其实现用户的添加。
考虑到用户数量比较多的问题,删除用户使用GridView控件,既可以实现用户的浏览,又可以删除。
(1)打开RoleManager.ascx文件,在View2中添加控件,如图21-3所示。
图21-3用户管理界面控件图
(2)默认情况下,在完成用户添加的操作后,并不返回第一步,但为了方便用户的添加,可以手动设置让其返回。
在CreateUserWizard1控件的ContinueButtonClick事件中,添加代码清单21-2中的代码。
代码清单21-2添加用户向导的返回操作
protectedvoidCreateUserWizard1_ContinueButtonClick(objectsender,EventArgse)
{
//更新内容
GridView1.DataBind();
//返回创建用户界面
CreateUserWizard1.ActiveStepIndex=0;
}
(3)设计GridView的数据源。
其实浏览和删除用户是两个简单的方法,但GridView控件的数据源只能是某种数据源控件的ID,不能是方法的返回集合,所以必须设置一个类,用对象来作为GridView的数据源。
在App_Code目录下,添加一个类,名为“UserManager”。
代码如清单21-3所示。
最终GridView控件和ObjectDataSource的属性设置,请参考代码清单21-4。
代码清单21-3浏览和删除用户的操作类
usingSystem;
usingSystem.Web.Security;
///
///用户的操作类
///
publicclassUserManager
{
publicUserManager()
{
}
//获取所有用户
publicMembershipUserCollectionGetUsers()
{
returnMembership.GetAllUsers();
}
//删除指定用户
publicvoidDeleteUser(stringUserName)
{
Membership.DeleteUser(UserName);
}
}
代码清单21-4数据源设置的部分HTML代码
GridViewID="GridView1"runat="server"AutoGenerateColumns="False"DataKeyNames="UserName" DataSourceID="ObjectDataSource1"Width="217px"> CommandFieldShowDeleteButton="True"ShowSelectButton="True"/> BoundFieldDataField="UserName"HeaderText="UserName"ReadOnly="True"SortExpression="UserName"/> GridView> ObjectDataSourceID="ObjectDataSource1"runat="server"DeleteMethod="DeleteUser" SelectMethod="GetUsers"TypeName="UserManager"> ParameterName="UserName"Type="String"/> ObjectDataSource> (4)设置Page_Load事件中的下面一行代码,表示显示的是第二个View控件。 MultiView1.ActiveViewIndex=1; (5)按F5运行页面,测试对用户的添加和删除是否成功。 21.1.3赋予用户角色权限 一个用户可以同时具备多个角色,一个角色也可以让多个用户同时拥有。 Roles类支持多个赋予用户角色的方法,可以是一个一个的添加,也可以一组一组的添加。 测试用户是否具有权限,或者移除用户的某一角色等功能都由Roles类完成,下面介绍其使用情况。 (1)设计用户角色设置的界面,如图21-4所示。 主要功能有添加用户到角色中、移除角色中的用户和显示角色中的用户。 图21-4设置用户角色的界面 (2)图21-4中的下拉框和第一个列表框,表示的是系统已经具备的角色,在页面一显示的时候,就应该有数据。 所以在代码清单21-1的Page_Load事件中,添加下面的代码: //用户角色的设置 //绑定角色下拉框和列表框 ddlrole1.DataSource=myroles; ddlrole1.DataBind(); ListBox1.DataSource=myroles; ListBox1.DataBind(); (3)添加和移除两个按钮的代码,如清单21-5所示。 代码清单21-5设置用户角色的代码 protectedvoidButton3_Click(objectsender,EventArgse) { //赋予用户角色 //首先判断用户是否已经具备此角色 if(Roles.IsUserInRole(txtusername.Text,ddlrole1.SelectedValue)) { Response.Write(" } else { //添加用户到角色中 Roles.AddUserToRole(txtusername.Text,ddlrole1.SelectedValue); } } protectedvoidButton4_Click(objectsender,EventArgse) { //移除角色中的用户 //首先判断用户是否在此角色中 if(! Roles.IsUserInRole(txtusername.Text,ddlrole1.SelectedValue)) Response.Write(" else //移除角色中的用户 Roles.RemoveUserFromRole(txtusername.Text,ddlrole1.SelectedValue); } (4)当用户选择角色列表中的任一角色时,第二个列表框显示其包含的所有用户。 此时触发的事件是SelectedIndexChanged,要使其有效,还必须设置“ListBox1”控件的AutoPostBack属性为True。 此事件代码如清单21-6所示。 代码清单21-6选择角色列表时触发的事件 //当选择角色名称的时候,通过方法获取角色中所有用户 ListBox2.DataSource=Roles.GetUsersInRole(ListBox1.SelectedItem.Value); ListBox2.DataBind(); (5)修改Page_Load事件中的下面一行代码,表示显示的是第三个View控件。 MultiView1.ActiveViewIndex=2; (6)按F5编译并运行页面,测试操作是否成功。 21.2考勤设置 考勤的功能分为两部分: 一是设置考勤的工作时间;一是考勤的登记。 需求中规定,考勤时间的设置必须由管理人员完成,而登记考勤则是员工一登录系统时,系统自动完成的。 本节只介绍考勤时间如何设置。 21.2.1考勤工作时间的设置 考勤工作时间在数据库中,其实只有一条记录,一旦设置了工作时间,以后就只能修改而不能再添加。 下面介绍如何设置考勤: (1)在controls文件夹下,添加一个用户控件,命名为“TimeSet”。 (2)根据需求设计考勤设置的界面,如图21-5所示。 图21-5考勤时间设置界面 (3)在考勤设计中,涉及到三个方法: 更新考勤设置、获取上班的时间和获取下班的时间。 为了维护方便,将这些方法放在一个类中。 在App_Code目录下,添加一个类,命名为“TimeSet”。 在其中添加三个方法的代码,如清单21-7所示。 代码清单21-7考勤时间设置类 usingSystem; usingSystem.Text; usingSystem.Data; usingSystem.Data.SqlClient; usingSystem.Configuration; /// ///设置工作时间 /// publicclassTimeSet { //SQL语句设置为常量,方便日后的维护 privateconststringSQL_INSERT_TIMESET="INSERTINTOtimesetVALUES(@begintime,@endtime,'')"; privateconststringSQL_UPDATE_TIMESET="UPDATEtimesetSETbegintime=@begintime,endtime=@endtime"; privateconststringSQL_SELECTBEGIN_TIMESET="SELECTTOP1BEGINTIMEFROMtimeset"; privateconststringSQL_SELECTEND_TIMESET="SELECTTOP1ENDTIMEFROMtimeset"; publicTimeSet() { } /// ///设置工作时间的方法 /// /// /// /// publicboolSetTime(stringbegintime,stringendtime) { //初始化参数数组 SqlParameter[]parms=newSqlParameter[]{ newSqlParameter("@begintime",SqlDbType.NVarChar,5), newSqlParameter("@endtime",SqlDbType.NVarChar,5)}; SqlCommandcmd=newSqlCommand(); //依次给参数赋值 parms[0].Value=begintime; parms[1].Value=endtime; //将参数添加到SqlCommand命令中 foreach(SqlParameterparminparms) cmd.Parameters.Add(parm); //获取数据库的连接字符串 using(SqlConnectionconn=newSqlConnection(SqlHelper.ConnectionStringLocalTransaction)) { //打开数据库连接,执行命令 conn.Open(); //设置Sqlcommand命令的属性 cmd.Connection=conn; cmd.CommandType=CommandType.Text; //此时判断是添加时间设置还是更新时间设置 //因为一个系统中只能有一个时间设置,所以通过判断是否已经存在时间值 //查看是更新还是添加 if(GetOnDutyTime()=="") //返回的时间没有值,则使用添加语句 cmd.CommandText=SQL_INSERT_TIMESET; else //否则是更新语句 cmd.CommandText=SQL_UPDATE_TIMESET; //执行添加的SqlCommand命令 intval=cmd.ExecuteNonQuery(); //清空SqlCommand命令中的参数 cmd.Parameters.Clear(); //判断是否添加成功,注意返回的是添加是否成功,不是影响的行数 if(val>0) returntrue; else returnfalse; } } /// ///获取上班时间值 /// /// publicstringGetOnDutyTime() { using(SqlConnectionconn=newSqlConnection(SqlHelper.ConnectionStringLocalTransaction)) { //打开数据库连接,执行命令 conn.Open(); SqlCommandcmd=newSqlCommand(SQL_SELECTBEGIN_TIMESET,conn); //设置Sqlcommand命令的属性 cmd.CommandType=CommandType.Text; //执行添加的SqlCommand命令 SqlDataReaderdr=cmd.ExecuteReader(); stringworktime=""; //判断是否有数据,有则选择第一列的值 while(dr.Read()) worktime=dr.GetString(0); //返回上班的时间 returnworktime; } } /// ///获取下班时间值 /// /// publicstringGetOffDutyTime() { using(SqlConnectionconn=newSqlConnection(SqlHelper.ConnectionStringLocalTransaction)) { //打开数据库连接,执行命令 conn.Open(); SqlCommandcmd=newSqlCommand(); //设置Sqlcommand命令的属性 cmd.Connection=conn; cmd.CommandType=CommandType.Text; cmd.CommandText=SQL_SELECTEND_TIMESET; //执行添加的SqlCommand命令 SqlDataReaderdr=cmd.ExecuteReader(); stringworktime=""; //判断是否有数据,有则选择第一列的值 while(dr.Read()) worktime=dr.GetString(0); //返回下班的时间 returnworktime; } } } (4)根据需求,为界面添加代码,如清单21-8所示。 代码清单21-8考勤时间设置功能的代码 protectedvoidPage_Load(objectsender,EventArgse) { //初次显示页面时,要先查看是否设置了工作时间 //如果已设置,则两个文本框分别显示其值 if(! Page.IsPostBack) { TimeSetmyset=newTimeSet(); //如果为空,则表示是第一次设置时间 TextBox1.Text=myset.GetOnDutyTime(); TextBox2.Text=myset.GetOffDutyTime(); } } protectedvoidButton1_Click(objectsender,EventArgse) { //初始化时间设置类 TimeSetmytime=newTimeSet(); //使用时间设置类的方法设置时间 boolresult=mytime.SetTime(TextBox1.Text,TextBox2.Text); //判断执行是否成功 if(result) Response.Write(" } (5)在ManagerArea文件夹下,添加一个Web窗体TimeSetPage,测试这个用户控件的使用。 按F5编译并运行页面,设置考勤的时间,并查看结果。 21.3部门设置 部门设置在前面讲过,而且还做成了用户控件,本例同样将部门列表单独设置为一个用户控件,并简单讲解部门的设置功能。 (1)在controls文件夹下,添加一个用户控件,命名为“DepartList”,用来显示部门的下拉框。 在其中添加一个DropDownList控件,并设置其数据源,具体属性可参考代码清单21-9。 代码清单21-9DropDownList中数据源属性HTML代码 DropDownListID="DropDownList1"runat="server"DataSourceID="SqlDataSource1" DataTextField="DepartName"DataValueField="DepartName"> DropDownList> SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings: SimpleOAConnectionString%>" SelectCommand="SELECT[DepartID],[DepartName]FROM[Department]"> SqlDataSource> (2)为此控件添加一个公共属性,代码如清单21-10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 管理者 特区 设置 模块