今天接着上一篇讲,说一下角色管理的具体使用。以上一篇文章里的Rloes.aspx文件代码进行讲解。
1、显示所有的角色
首先在页面里添加一个ListBox1控件用来显示角色数据,之后在代码页里把当前的所有角色名称绑定给这个ListBox1。
ListBox1.DataBind();
这里使用Roles类的GetAllRoles方法返回所有的角色数据。
2、显示所有的用户
在页面里添加一个ListBox2控件用来显示用户数据,之后在代码页里把当前的所有用户名称绑定给这个控件。
ListBox2.DataBind();
这里使用Membership的GetAllUsers方法返回所有用户数据。
3、显示一个用户所属的角色
在页面里添加一个ListBox3控件用来显示某个用户所属的角色,添加一个Label1用于显示选中用户的名称,再添加一个Button3,之后在Button3_Click里写一段程序,当用户从ListBox2控件中选择了一个用户后点击Button3就会把该用户所属的角色显示到ListBox3中,注意一个用户可以有一个或多个角色,也可以没有角色。
... {
Label1.Text = ListBox2.SelectedValue;
ListBox3.DataSource = Roles.GetRolesForUser(ListBox2.SelectedValue);//把该用户所属的角色绑定给ListBox
ListBox3.DataBind();
}
else
... {
ListBox3.Items[0].Text = "请先选择用户!";
}
首先使用IF判断一下用户有没有在ListBox2里选择一个用户,如果选了就用Roles的 GetRolesForUser方法返回我们选择用户的角色,方法的参数是我们所选择的用户名称,否则就提示先选择用户。
4、显示一个角色所包含的用户
在页里添加一个BulletedList1控件用于显示我们选择的角色所包含的用户,添加一个Label2用于显示选中角色的名称,再添加一个Button6,在Button6_Click里加入代码
... {
Label2.Text = ListBox1.SelectedValue;
BulletedList1.DataSource = Roles.GetUsersInRole(ListBox1.SelectedValue);//把该角色包含的用户绑定显示
BulletedList1.DataBind();
}
else
... {
Response.Write("请先选择角色!");
}
先判断一下是否在ListBox1里选择了一个角色,如果选择了就用Roles的 GetUsersInRole方法返回这个角色所包含的用户并赋值给BulletedList1,这个方法的参数里是我们选择的角色的名称。
5、创建一个新角色
在页里添加一个TextBox1和Button1,在Button1_Click里写入代码
... {
Roles.CreateRole(TextBox1.Text);//创建新角色
Response.Write(TextBox1.Text + " 角色创建成功!");
ListBox1.DataSource = Roles.GetAllRoles();//重新绑定角色显示
ListBox1.DataBind();
}
catch (Exception ex)
... {
Response.Write(ex.Message);//如果出错,输出错误信息
}
这里使用了try catch语句,try代码段里写的是我们想要做的事情,catch里写的是如果我们要做的事情出现了错误就把错误的原因显示出来,我这里只是使用了try catch语句的一个基本用法,对于这个语法的更多知识可以到MSDN里查询在这里就不多说了。代码中我们使用Roles类的CreateRole方法来创建一个新角色,参数里是我们在TextBox1里输入的新角色的名称,如果我们输入了一个已经存在的角色名称,则catch代码段会给我们提示出错误信息。
6、删除一个角色
在页里添加一个TextBox3和Button5,在Button5_Click里写入代码
... {
Roles.RemoveUsersFromRole(Roles.GetUsersInRole(TextBox3.Text), TextBox3.Text);
Roles.DeleteRole(TextBox3.Text);
Response.Write(TextBox3.Text + " 角色已经删除!");
ListBox1.DataSource = Roles.GetAllRoles();//重新绑定现有的所有角色
ListBox1.DataBind();
}
catch (Exception ex)
... {
Response.Write(ex.Message);
}
这里注意如果一个角色里包含有用户的话,那么是不能够直接删除的,要先用Roles的 RemoveUsersFromRole方法把该角色所包含的用户从角色中清除掉(用户数据不会被删除只是和这个角色没关系了),然后再用DeleteRole方法把角色删除掉。RemoveUsersFromRole方法的参数里是该角色所包含的所有用户及该角色名称,这里先使用Roles.GetUsersInRole(TextBox3.Text)返回该角色包含的用户。Roles.DeleteRole方法的参数里是我们要删除的角色的名称。
7、给一个用户添加角色
在页面里添加一个Button2控件,在Button2_Click里写入代码
... {
Roles.AddUserToRole(ListBox2.SelectedValue, ListBox1.SelectedValue);//把用户添加到角色里
Response.Write(ListBox2.SelectedValue + " 已经添加到 " + ListBox1.SelectedValue + " 角色中!");
ListBox3.DataSource = Roles.GetRolesForUser(ListBox2.SelectedValue);//把该用户所属的角色绑定给ListBox
ListBox3.DataBind();
}
catch (Exception ex)
... {
Response.Write(ex.Message);
}
在使用的时候,先在ListBox2里选择一个要进行操作的用户,再在ListBox1里选择要给这个用户添加的角色,之后使用Roles类的AddUserToRole方法把LIstBox1的选择的角色添加给ListBox2里选择的用户,这个方法参数里第一个是用户名称,第二个是角色名称。
8、删除一个用户的角色
在操作的时候,先选择一个用户,点击按钮查看它所属的角色,它所属的角色将显示在ListBox3里,这时候在ListBox3里显示的角色里选择一个多或个想要去除的角色(按Ctrl进行多选)之后点击按钮把这个用户的某个角色去除掉。在Button4_Click里写入代码:
... {
int[] iSelected = ListBox3.GetSelectedIndices();//用已选择的角色索引值建立一个数组
string[] sRoles = new string[iSelected.Length];//建立一个数组存放多个角色数据
for (int i = 0; i < iSelected.Length; i++)
...{
sRoles[i] = ListBox3.Items[iSelected[i]].Value;//给角色数组赋值
}
try
...{
Roles.RemoveUserFromRoles(ListBox2.SelectedValue, sRoles);//删除用户的一个或多个角色
Response.Write("用户" + ListBox2.SelectedValue + "的所选角色已删除!");
ListBox3.DataSource = Roles.GetRolesForUser(ListBox2.SelectedValue);//重新绑定一次用户的角色
ListBox3.DataBind();
}
catch (Exception ex)
...{
Response.Write(ex.Message);
}
}
else
... {
Response.Write("请先选择一个用户和一个角色!");
}
首先用IF语句来判断一下,有没有选择用户和要去除的角色,如果有,就建立一个INT数组,把所选择的角色项的索引存放在这个数组中,接着再建立一个字符串数组,用于存放所选择的角色名称,接下来用FOR循环来给字符串数组赋值,把我们选择的角色名称都赋到数组中,之后调用Roles类的RemoveUserFromRoles方法把我们选择的用户的相关角色去除掉,方法的参数第一个是用户名,第二个是角色名称。最后,记的要给ListBox3设置SelectionMode="Multiple"表示可以进行复选。
好了,到这里页面的代码介绍就结束了,我的这个Roles.aspx页做的很粗糙,所使用的有些控件比如ListBox也可以换成DropDownList或CheckBoxList等。
下一篇里要讲一下,如何在实际应用中使用角色来限制访问。