请教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
...
然后将角色和实体权限表建立一个多对多的映射表