User存放于 UserTpye--UserGroup下结构为
UserType
UserGroup
User目前有多个UserType每个UserType有自己的权限,下属的UserGroup继承UserType的权限,分配权限时可以小于等于所在UserType的权限User继承UserGroup的权限,没有权限设置。问题:如何建立数据库表比较合理?我的想法是建立UserType表,UserGroup表
一张Action其中标示出哪些权限属于UserType,哪些属于UserGroup权限表,存放所有的权限。建立一张AcUser映射表,关联Action表,UserType表,UserGroup表存储时将每条权限存入AcUser基本实现了要求,但是存在一个不合理的问题是,AcUSer逻辑上不规范,权限多和UserGroup增多后该表可能会很大在读取权限时很难写一个统一的方法来判断权限请高手指点
UserType
UserGroup
User目前有多个UserType每个UserType有自己的权限,下属的UserGroup继承UserType的权限,分配权限时可以小于等于所在UserType的权限User继承UserGroup的权限,没有权限设置。问题:如何建立数据库表比较合理?我的想法是建立UserType表,UserGroup表
一张Action其中标示出哪些权限属于UserType,哪些属于UserGroup权限表,存放所有的权限。建立一张AcUser映射表,关联Action表,UserType表,UserGroup表存储时将每条权限存入AcUser基本实现了要求,但是存在一个不合理的问题是,AcUSer逻辑上不规范,权限多和UserGroup增多后该表可能会很大在读取权限时很难写一个统一的方法来判断权限请高手指点
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入用户名", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
if (textBox2.Text == "")
{
MessageBox.Show("请输入密码", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
SqlConnection cn = BaseClass.DBconn.Lj();//连接数据库
cn.Open();
string sql = "select count(*) from tb_user where username='"+textBox1.Text+"' and pwd='"+textBox2.Text+"'";
SqlCommand cm = new SqlCommand(sql, cn);
int i = Convert.ToInt32(cm.ExecuteScalar());//将查询的结果返回一个值,如果有的话就说明用户名 密码正确
if (i > 0)
{
cm = new SqlCommand("select * from tb_User where UserName='" + textBox1.Text + "'",cn);//查询得到用户名的信息
SqlDataReader sdr = cm.ExecuteReader();
sdr.Read();
string Userpower = sdr["power"].ToString().Trim();//取出权限值
cn.Close();
frmMain main = new frmMain();
main.Names = textBox1.Text;//将用户名的名字赋值给下一个窗口
main.power = Userpower; //同样赋值权限
main.Times = DateTime.Now.ToShortDateString();//赋值时间
main.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误!");
}
}
} ---------------------------------
所以有两个具有权限的表
连在一起不符合逻辑,看看我楼顶的描述,可能描述的不是很清晰,劳你费心了
用户类新—权限 表
用户组—权限 表
这两个表大致一样,我不如在 用户类新—权限 表中加一个 UserGroupID,整合两张表
用户类型表(用户类型ID,用户类型权限分配<权限ID1,权限ID2.....>,.....)
用户组表(组ID,用户类型ID,用户权限在用户类型权限的基础上限制分配<限制用户类型表.权限ID1使用>,........)
用户表(用户ID,组ID,.......)简单的描述了一下,请参考。
用户类型表(用户类型ID,用户类型权限分配 <权限ID1,权限ID2.....>,.....)
用户组表(组ID,用户类型ID,用户权限在用户类型权限的基础上限制分配 <限制用户类型表.权限ID1使用>,........)
用户表(用户ID,组ID,.......) 简单的描述了一下,请参考。 这样做比较容易扩展,适合需求的小变动。
权限表
职责表
职责组表
职责权限关系表
用户表
用户职责关系表如果这样设计,感觉实现就比较easy。
(用户表,用户描述信息,密码,)Table Author
(权限表,)Table AuthorGroup
(权限组表,)Table AuthorDtl
(权限明细表,具体权限)Table UserRelation
(用戶表<--->权限组表)
表面上看起来离散,往往最高效:一个Action和User关联表
一个Action和UserGroup关联表
一个Action和UserType关联表实际上用户的Action表现从上面三个表中顺序查询,如果找到就立刻返回(不会再查下一个表)。
这样说是不是就有UserGroup,UserType,UserType-UserGroup的关系,UserType-Action ,Useroup-Action五张表了。后两个表什么意思就不清楚了。,还有user表呢?这个表怎么处理。至少这样表的大小不再是Action*UserType*UserGroup。 ----这句的意思也不是很理解。。忘高人点拨,对表的建立不是很理解。。