角色表:TbRole
字段 类型 大小 约束 描述
ModuleID SMALLINT 主键,不为空 模块编号
ModuleName VARCHAR 30 唯一,不为空 模块中文名称
ModuleEName VARCHAR 30 唯一,不为空 模块英文名字
角色表:TbRole
字段 类型 大小 约束 描述
RoleID SMALLINT 主键,不为空 角色编号
RoleName VARCHAR 20 唯一,不为空 角色名称
RoleDesc VARCHAR 100 角色描述
角色权限设置表:TbRoleSet
字段 类型 大小 约束 描述
RoleSetID SMALLINT 主键,不为空 角色设置编号
RoleID SMALLINT 引用TbRole表 角色编号
ModuleID SMALLINT 引用TbModule表 模块编号
用户表:TbUser
字段 类型 大小 约束 描述
UserName VARCHAR 20 主键,不为空 用户名
UserPassword VARCHAR 10 不为空 密码
UserRole SMALLINT 引用TbRole表 角色
模块表是把系统的各个模块写在其中,然后在角色表中加入角色,再通过角色权限设置表把各个角色能访问的权限联系起来。
模块表:
角色表:
角色权限设置表:
从以上我们可以看出,总共有4个模块,两个角色,他们分别具有的权限为:
管理员(浏览、添加、修改、删除) 普通用户(浏览)
添加了角色以后,我们在添加用户时就可以设定角色了
参考图如下:
用户添加:
2. 用户控件
数据库设置好了以后,接下来要想在什么地方进行身份检查
因为整个网站的头应该是相同的,所以我们可以把验证信息放到一个用户控件中,以后只要把用户控件放到相应的网页即可
但是每个网页都是不同的功能模块,我们怎么能保证用户控件能够动态的识别呢?
接下来在用户控件中加入一个模块英文名字的属性
// 模块英文名称
private string moduleEName = "";

/**//// <summary>
/// 模块英文名称属性
/// </summary>
public string ModuleEName

{
set
{moduleEName = value;}
get
{return moduleEName;}
}
private void Page_Load(object sender, System.EventArgs e)

{
if (!IsPostBack)
{
// 模块名称等于空,代表不需要进行验证
// 只有在模块名称不为空时,才进行权限验证
if (moduleEName != "")
{
// Session为空,禁止登录,防止非登录用户
if (Session["UserRole"] == null || Session["UserRole "].ToString() == "")
Response.Redirect("提示页面");
try
{
// 连接数据库
……
// 根据模块英文名称和角色ID进行查选
SqlCommand sqlCmd = new SqlCommand("SELECT RoleSetID FROM TbModule a,TbRoleSet b WHERE
a.ModuleID=b.ModuleID AND ModuleEName="" + moduleEName + "" AND RoleID=" + Session["UserRole "].ToString() + "",sqlCon);
sqlCon.Open();
sqlDr = sqlCmd.ExecuteReader();
// 返回有记录说明有权限,否则没有权限访问该模块
if (!sqlDr.HasRows)
{
Response.Redirect("提示页面");
}
}
catch
{}
finally
{
// 释放
……
}
}
}
}