请教c# winform,权限设计问题

xiehuangda 2012-03-14 04:02:01
请教c# winform,权限设计问题


用户表
Users

uid,uName,rolesID
1 张三 2,3
2 李四 1,3,2
3 小明 1
4 小李 3

rolesID就是角色表的ID,里面的单个 数字就代表一种角色,逗号分开,就同时拥有代表几种角色
比如: 2,3就代表同时拥有 员工权,和经理权



角色和权限表
Roles

角色表里的设计:
Rid,rName,新增权,修改权,删除权,..........N权
1 主管 1 1 1
2 员工 1 0 0
3 经理 1 0 1

这些权限0代表无权,1代表有权。



现在,添加一个新用户的时候,使用dataGridView把角色表里的所有 角色都列出来,

dataGridView里每行自带有CheckBox
然后给新用户CheckBox选择,然后,提交后,把选择的 角色ID,以: 1,2,3这样的形式写入数据库 Users表的rolesID里



整了半天,也没有方法,让选择的值,以上面的格式,写入数据库
请教各位详细写个代码!


还有,如果是修改的用户的时候,怎么样取值呢?
打开修改的winform界面,dataGridView形式列出所有角色,取得Users表的rolesID的格式为:1,2,3
这样的值,对应到相应CheckBox里呢?然后来决定 CheckBox是勾选,还是未选


请教,请教了。

或者,有更加好的,设计权限方案呢?
...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiehuangda 2012-03-14
  • 打赏
  • 举报
回复
表太多了。
3个表,能解决方法的就可以。

如果使用了1楼的方法,怎么样查询数据,加载权限。判断有什么权限呢?
SQL 怎么样写。
PaulyJiang 2012-03-14
  • 打赏
  • 举报
回复
楼上的方案不错,不知道楼主看明白了没
xiehuangda 2012-03-14
  • 打赏
  • 举报
回复
新增或者修改一个用户的时候。
在 winform 中,怎么样使用2个ListBox 互移

比如新增一个 新用户。
首先,加载窗体的时候,左边的ListBox列出所有的角色名。
然后双击需要的角色,就移动到右边的ListBox中。然后点保存,就写入数据库中。

如果是修改一个用户的时候,加载窗体时,左边的ListBox只是列出未选的角色。
右边的,则是列出 已选的角色


请教请教
……
[/Quote]
  • 打赏
  • 举报
回复
字段里用逗号是最愚蠢的设计,因为字符串处理是数据库的弱项,处理起来很麻烦,效率又低。
应该设计成

用户表
Users

uid,uName
1 张三
2 李四
3 小明
4 小李

用户权限表
UserRole

uid roleid
1 2
1 3
2 1
2 2
2 3
...

角色表
Role

roleid rolename parentRoleID
1 主管 3
2 员工 1
3 经理 0

其中parentRoleID定义上下级关系,缺点是查询时用到递归,比较麻烦,如果不需要可以不用

角色权限表
RolePermission

Rid,新增权,修改权,删除权,..........N权
1 1 1 1
2 1 0 0
3 1 0 1

也可以把权限单独做个表:
Permission
pid pname
1 删除
2 修改

角色权限表就变成:
rid pid
1 1
1 2
...

对于比较复杂的情况,还可以增加一个"实体"表:
Entity

eid ename
1 工资表
2 签到表

以及实体权限表
EntityPermission

epid eid pid
1 1 1
1 1 2
...

然后将角色和实体权限表建立一个多对多的映射表

深海之蓝 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hzzasdf 的回复:]
字段里用逗号是最愚蠢的设计,因为字符串处理是数据库的弱项,处理起来很麻烦,效率又低。
应该设计成

用户表
Users

uid,uName
1 张三
2 李四
3 小明
4 小李

用户权限表
UserRole

uid roleid
1 2
1 3
2 1
2 2
2 3
...

角色表
Role

roleid rolename pa……
[/Quote]
嗯,这样符合范式要求
欢乐的小猪 2012-03-14
  • 打赏
  • 举报
回复
把权限单独做表
xiehuangda 2012-03-14
  • 打赏
  • 举报
回复
新增或者修改一个用户的时候。
在 winform 中,怎么样使用2个ListBox 互移

比如新增一个 新用户。
首先,加载窗体的时候,左边的ListBox列出所有的角色名。
然后双击需要的角色,就移动到右边的ListBox中。然后点保存,就写入数据库中。

如果是修改一个用户的时候,加载窗体时,左边的ListBox只是列出未选的角色。
右边的,则是列出 已选的角色


这个功能,怎么做呢? SQL又怎么写呢?
请教各位!谢谢
xiehuangda 2012-03-14
  • 打赏
  • 举报
回复
还有,做winform的时候,
新增或修改用户的时候,
怎么样列出所有角色, 没有选中的角色在左边, 被选的角色在右边呢?
怎么样设计,和怎么样写SQL语句呢?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧