权限分配问题

权限分配问题,我结合原来的一些设计经验,想到了通过数字组合来实现权限的分配与管理,其结构  
   
                                    查询(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;  
  }  
   
  这个还不是一个特别完善的东西,当初我项目没时间,我就没写了,最后应该可以实现不管多少等级都可以算出来,我现在只能算三个等级。  
   
  当然最后我把它做成了用户控件,使用很方便了。

转载于:https://www.cnblogs.com/sweting/archive/2009/06/29/1513307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值