权限分配问题,我结合原来的一些设计经验,想到了通过数字组合来实现权限的分配与管理,其结构
查询(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 controlTemp="";
controlPopedom=Convert.ToInt32(controlId);
// 判断数据库操作类型
Math.DivRem(controlPopedom,16,out intResult);
controlPopedom=controlPopedom-intResult;
if (intResult>=8) // 判断删除权限
{
intResult=intResult-8;
controlTemp="8,";
}
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;
}
// 判断人员操作类型
controlTemp="";
if (controlPopedom>=128) // 判断所有权限
{
controlPopedom=controlPopedom-128;
controlTemp="128,";
}
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;
}
这个还不是一个特别完善的东西,当初我项目没时间,我就没写了,最后应该可以实现不管多少等级都可以算出来,我现在只能算三个等级。
当然最后我把它做成了用户控件,使用很方便了。