动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.BEA邮政行业RFID解决方案.
.Java,Beans 和 关系数据库 的 镜.
.基于JDBC的数据库连接池高效管理.
.Java核心代码例程之:(JAXP) DOM.
.Java面试陷阱第三波.
.SWT:实现自我绘制的Button组件.
.NetBeans IDE4.1 J2EE.
.Java模式设计之单例模式(二).
.try catch finally与return的执行.
.如何打造实用网站.
.Java的Build工具—Ant应用指南(.
.Java相关名词用语.
.Java编程语言最薄弱的部分--线程.
.Java的数据类型与方法重载.
.通过WSDL决定Web服务是否支持XML.
.Web环境Hibernate数据源问题补充.
.java设计模式之 Proxy(代理).
.JavaMail常见问题之POP3问题.
.怎样用Java的加密机制来保护你的.
.在组件上显示图象.

简单客户系统的权限控制实现

发表日期:2008-1-5 |



  一个客户系统最基本的功能是对客户的创建,修改,删除和查询。实现这样的功能通常是在数据库中建一个Customer表,然后通过程序实现以上基本功能。在一个个人环境的应用中,一个用户可以对所有的客户进行任意操作,基本不存在权限控制问题。在多用户系统中,客户属于一个人或者一群人,而对客户的操作权限也不可能是人人一样。所以需要对用户的操作做权限控制。
  
  这里有必要先对权限控制方式本身做一下讨论,有些系统用菜单进行权限控制,比如"新建客户","浏览客户",往往用操作名加上一个资源名代表一个权限,这样的权限控制有一个缺陷,就是一般漏掉了一个资源范围,比如浏览什么样的客户,就没有说明。当然也可以加上,比如浏览个人客户,浏览部门客户,浏览公司客户,但是随着需要控制资源类型的增加,通过不断增加菜单项来进行控制,并不是一个很好的方法。在B/S系统中的菜单控制,有2重意义,一是真正的菜单,没有权限的用户就看不到相应的菜单项,另外一个为了防止用户任意提交信息,在服务器端对用户提交的URL进行检查,看是不是有这个权限。比如对于用户请求的ListCus.do就要先检查用户是否有访问这个URL的权限:
  public class ListCusAction extends Action{
    ...
    public ActionForward execute(...){
    ...
    //必须提供这样的检查的方法。
     PermitUtil.checkPermit(userID,url);
     list = dao.query(sql);
     ...
    }
  } 
  另外一种控制办法是对操作和操作资源定义权限,比如用户A可以对客户进行修改操作。这样细粒度的权限控制对程序的扩展性和安全性有很大好处,但实现比前一种费时,下面通过分析说明2种方式的特点。
  
  作为客户系统最简单的一种考虑,是每个用户治理自己的客户。这种请况下,我们通过在Customer表中增加一个用户字段,就可以知道这个客户对应于哪一个用户。如下面的类所示:
  public class Customer{
    private String ctmNo;
    private String ctmName;
    ...
    private String userID;
    //getters and setters
  } 
  那么通过菜单的控制方式,我们认为每个有客户创建权的用户都可以创建属于自己的客户,什么叫客户创建权,就是可以看到和选择“添加客户”菜单项的用户。同时,“客户浏览”就表示浏览属于自己的客户,这样一来,创建客户的用户可以看到自己的客户,并进行操作,我们通过菜单控制权限方式完成了这个需求。需要注重的是:在用户进行相应操作前,我们先判定这个客户是不是属于这个用户,是就可以操作,不是就不可以。如下例所示:
  public class DelCusAction extends Action{
    ...
    public ActionForward execute(...){
    ...
    //必须提供这样的检查的方法。
     dao.checkPermit(customer,userID);
     dao.delete(customer);
     ...
    }
  } 
  进行这个判定是出于安全性考虑的,非凡在B/S架构的软件系统中,你无法阻止客户向服务器端任意提交信息。比如用户A不使用菜单,向服务器请求"DelCus.do?ctmNo=No1",而No1属于用户B,假如不进行判定,客户就被删除掉了。所以光靠控制菜单项的显示完成权限控制,并不完整。
  
  现在我们接触一个更复杂一点的需求,就是客户转移,把客户从一个用户,指派给另外一个用户。在上面的实现基础上,只要添加一个接口,改变客户所属的用户,问题也就解决了。如下:
  public class ChangeUserAction extends Action{
    ...
    public ActionForward execute(...){
    ...
     dao.checkPermit(customer,userID);
     //改变客户所属用户到newUserID。
     dao.changeUser(customer,newUserID);
     ...
    }
  } 
  
  每个用户现在可以治理自己的客户,也可以把客户交给别人治理,问题解决得完美。我们再考虑实际的情况,一个客户可能可以被一个用户看,但是不可以被修改或者删除。我们怎么控制这样的权限,加一个菜单项-"察看客户",用户A可以执行这个操作,但是不可以选择菜单项-"修改客户",针对每一个动作,我们加了一个菜单项。我们需要控制的内容变得越来越多。再深入分析,可以发现,其实上面的方案已经不能满足需求。 2个客户我们如何知道一个可以被用户A看,一个不可以,出现了一个资源的治理问题,必须有另外的方案来进行这种权限的控制。我们设计一个资源类:
  public class CustomerResource{
    //客户编号
    private String ctmNo;
    //操作类型
    private String action;
    //用户
    private String userID;
    //setters and getters.
  } 
  再设计一个资源治理类:
  public class CustomerResourceManager{
    private static List resources;
    private static void addResources(CustomerResource resource){
     resources.add(resource);
    }
    //从数据库装载相应用户的客户操作权限。
    private static void retrieveResources(String userID){
    ...
    }
    //检查相应的权限是否在resources中存在。
    private static boolean checkPermit(CustomerResource permit){
    ...
    }
  } 
  客户端使用类:
  public class DelCusAction extends Action{
    ...
    public ActionForward execute(...){
     ...
     //必须提供这样的检查的方法。
     CustomerResource resource = new CustomerResource();
     resource.setCtmNo(customer.getCtmNo());
     resource.setAction("DELETE");
     resource.setUserID(userID);
     if(CustomerResourceManager.checkPermit(resource)){
      dao.delete(customer);
     }
     ...
    }
  } 
  在采用了上面的权限检查方式后,我们可以对每一个客户指定相应操作人的权限,对客户的操作就限制在了操作类型的多少上,基本的有“UPDATE,INSERT,DELETE,LIST,VIEW”等,其余也可以定义“SUBMIT”等操作,具体取决于系统需求。这样的好处是权限控制非常灵活,客户可以作为资源在用户之间自由流动。但是作为一个给用户最终使用的权限系统,这样的却体系不适合于出现在用户权限系统设置里面,不能叫每个用户都去自己指定自己创建客户的操作范围,最好是通过这种方式实现默认的业务和权限设定,满足了用户需求,又屏蔽复杂性。在完整的系统中,基于菜单的控制也是必不可少,这样的方式方便用户使用,也更易于用户理解。 2者通常应结合使用。
上一篇:工作流引擎的三种定位及其取舍 人气:683
下一篇:使用JAVA技术实现新一代OSS/BSS 人气:584
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成