-- 作者:admin
-- 发布时间:2009/9/15 10:20:51
-- 权限分配问题
权限分配问题,我结合原来的一些设计经验,想到了通过数字组合来实现权限的分配与管理,其结构 查询(1) 添加(2) 修改(4) 删除(8)『查询+添加(1+2)』 ... (16)个人权限 (32)部门权限 (64)院领导权限 权限的分配就是通过这样的数字的叠加实现,如系主任可以对本系教师的基本情况查询和修改,但对自己的基本情况只有查询的权限,那么它的权限应该为: 系主任权限=(32)部门权限+ 查询(1)+ 修改(4)+(16)个人权限+ 查询(1) =54 这样,我算出系主任权限=54,软件编写的时候,我就给系主任的帐号分配一个54的数值,然后我将54通过运算,分解出上面设计的权限。 举这样一个例子的目的在于,我如果给任意一个帐号分配一个数值就可以分析出它的权限,我通过自己举例证明每一个数字对应的权限应该是唯一的。
具体实现的时候你需要明确两点: 1、登录的人有什么权限,比如权限是54(具体代表如上所说的权限)。 2、控件显示的条件,比如个人可以访问还是部门用户可以访问,是只有查询权限还是有添加权限。 然后可以写一个类,传递三个参数进去(登录人的权限,控件的用户等级,数据库操作权限),返回true或者false,例如 HyperLink2.Visible=controlBoolen(Session["popedom"].ToString(),128,2) 或者 if(controlBoolen(Session["popedom"].ToString(),128,2)!=true) { Response.Redirect("index.aspx"); }
// 传入权限Session["popedom"]、部门功能、数据库功能,返回布尔值检验是否有权限使用 public bool controlBoolen(string controlId,int controlOrgUse,int controlDbUse) { int intResult; int controlPopedom; bool controlOrgPop; bool controlDbPop; bool control; string c8,"; } if (intResult>=4) // 判断修改权限 { intResult=intResult-4; controlTemp=controlTemp+"4,"; } if (intResult>=2) // 判断添加权限 { intResult=intResult-2; controlTemp=controlTemp+"2,"; } if (intResult>=1) // 判断查询权限 { intResult=intResult-1; controlTemp=controlTemp+"1"; } if(controlTemp.IndexOf(controlDbUse.ToString())==-1 || controlTemp==null) { controlDbPop=false; } else { controlDbPop=true; } // 判断人员操作类型 c128,"; } if (controlPopedom>=64) // 判断大类权限 { controlPopedom=controlPopedom-64; controlTemp=controlTemp+"64,"; } if (controlPopedom>=32) // 判断部门权限 { controlPopedom=controlPopedom-32; controlTemp=controlTemp+"32,"; } if (controlPopedom>=16) // 判断个人权限 { controlPopedom=controlPopedom-16; controlTemp=controlTemp+"16"; } if(controlTemp.IndexOf(controlOrgUse.ToString())==-1 || controlTemp==null) { controlOrgPop=false; } else { controlOrgPop=true; } // 得出综合权限 if (controlDbPop==true && controlOrgPop==true) { control=true; } else { control=false; } return control; } 这个还不是一个特别完善的东西,当初我项目没时间,我就没写了,最后应该可以实现不管多少等级都可以算出来,我现在只能算三个等级。 当然最后我把它做成了用户控件,使用很方便了。
|