日期:2014-05-17  浏览次数:20928 次

请教c# winform,权限设计问题
请教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是勾选,还是未选


请教,请教了。

  或者,有更加好的,设计权限方案呢?

------解决方案--------------------
字段里用逗号是最愚蠢的设计,因为字符串处理是数据库的弱项,处理起来很麻烦,效率又低。
应该设计成

用户表
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
...

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