OA系统权限管理设计(asp.net c#)

设计了个
用户权限表tb_authority以下是字段:
UserID
UsergroupID 工作组ID
ModuleCode 模块
ActionCode 操作

ActionCode代表相应的操作组合:访问用01表示,添加用02表示,删除用03表示,修改用04表示,如果是模块即可以访问又可以添加用01_02表示,可以访问又添加又删除用01_02_03表示
如实现工作信息(001)可以查看,添加功能
使用checkbox来选择是否有权限
使用checkbox1,勾选代表可以访问,checkbox2勾选代表可以添加,checkbox3勾选代表可以删除,checkbox4勾选代表可以修改
1.我勾选checkbox1和checkbox2,希望可以01,02用(_)符号连接起来01_02插入ActionCode字段中,这个该如何实现??
2.当我们对这个权限进行更改,打开页面时如何通过把01_02分开,分开为01,02,相应的checkbox1和checkbox2勾选起来

这样可以实现但复杂,后期维护也不方便,看我如何解决。 二进制思路
1 访问 2 添加 4 删除 8 修改
0001 0010 0100 1000
那么他们的组合 就是 1111 0111 0011 1110 1101 1001 等 十进制 1到15
如果 有访问权限 添加权限 就 保存 3 1+ 2 得到的
页面加载读取出来后 将3 转二进制 得到 11 表示前两项被选择
不知道可有帮助。追问

能详细点写出来看看,或者有没有现成资料可以发到我邮箱里[email protected]
如果这种我想把这个和ModuleCode 模块 连接起来用该如何做
ModuleCode:如 001表用户管理模块 002表工作信息管理模块 003示会议信息模块
004示项目管理模块 005表人事管理模块
我希望实现001_01_02 对用户管理模块访问和添加 002_01_02对工作信息管理模块管理和添加这个该怎么做,没有思路?

追答

你问的很靠谱,我就是为解决这样问题,整理的这套思路。 其实你可以自己定义规则,举例子说明 前4位 保存模块信息 0000 在加4位保存功能权限(访问,添加,删除,修改) 0000 在加4位保存数据权限 0000 连接到一起 OK 那么你想 ModuleCode 或其他 都可以由你的 权限加载PART 完成。 4位可以管理15个模块 15个功能权限 15个数据权限 不够可以扩大到8位.模块可以不使用这种方式 单独保存编号

追问

前4位 保存模块信息 0000 在加4位保存功能权限(访问,添加,删除,修改) 0000 在加4位保存数据权限 0000 连接到一起??
如果增加一个数据范围:002工作信息模块,我希望对办公室组的工作信息数据有添加,删除,修改,访问权限,且对摄制组的工作信息数据同时也有访问权限,如果变成这样数据库表该如何设置,如何 保存?这个让我很困扰啊,你能具体的写一下吗

追答

没有理解你的意思,功能权限(添加 删除 修改 等)和数据权限(应该看到那一部分数据,不应该看到那一部分数据)要分开做。 数据权限控制可以这样做,其实就是部门对应关系。
部门 -------对应-------角色(组) ---------对应------------表单 角色包含用户
某一用户登录获取角色 根据上面角色对应关系产生已授权部门机构树 再更据上面对应关系由机构树控制表单
物理表设计非常简单 部门ID 角色ID 表单ID 思路就是这样,在套我上面的二进制,建议你找个c# 案例讲解的书看下权限控制. 我这样说细节你不一定明白,希望对你有帮助。

追问

你这个思路很好,数据库这个我已经没有问题了,只是在具体代码方面很难处理!你能推荐一下什么好的 C#案例有权限控制的书吗?

追答

走火入魔通用权限管理 学习下这个吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-30
//添加时:

string ActionCode ="";
System.Collections.ArrayList list = new System.Collections.ArrayList();
//勾选checkbox1
list.Add("01");
//勾选checkbox2
list.Add("02");
...
//勾选checkboxN
list.Add("0N");
for(int i = 0;i<list.Count;i++)
{
if(i < (list.Count-1))
{
ActionCode += "_";
}
ActionCode += list[i].ToString();
}

//此处即得到想要的字符串ActionCode

//修改读取时:
string ActionCode ="01_02_03_04";
string[] list = ActionCode.Split('_');
checkbox1.Value = list[0];
checkbox2.Value = list[1];
checkbox3.Value = list[2];
checkbox4.Value = list[3];
第2个回答  2011-03-30
遍历checkbox 选中则 拼起来
StringBuilder sb=new StringBuilder ();
if(checkbox1.checked)
sb.Append("01");
if(checkbox2.checked)
sb.Append("_02");
//....
string actioncode=sb.ToString();
//保存...
//下面自动打钩
string[] arr = actioncode.Split('_');
//循环
如果有01 则checkbox1.checked=true
...追问

如果这种我想把这个和ModuleCode 模块 连接起来用该如何做
ModuleCode:如 001表用户管理模块 002表工作信息管理模块 003示会议信息模块
004示项目管理模块 005表人事管理模块
我希望实现001_01_02 对用户管理模块访问和添加 002_01_02对工作信息管理模块管理和添加这个该怎么做,没有思路?

追答

那肯定要在ActionCode 表里加一个字段用来存储ModuleCode ,以便知道是那个模块的权限

追问

你能具体的写一下看看嘛

追答

你保存权限的时候把ModuleCode一起存
查询的时候根据ModuleCode 查就知道它有哪些权限了

追问

明白了,你的意思是在ActionCode 中把ModuleCode 一起保存在里面也用_连接起来是吧?
还有没有更简单的方法

相似回答