龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

B/S系统权限控制的一种简单方法

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
看了网上一些关于权限控制的帖子,越看越迷糊,什么用AOP(ASPect Oriented Programming,面向方面编程),用容器,RBAC(基于角色的访问控制方法),SSO,Jive的Proxy模式等等等等,且又是role又是gro
   看了网上一些关于权限控制的帖子,越看越迷糊,什么用AOP(ASPect Oriented Programming,面向方面编程),用容器,RBAC(基于角色的访问控制方法),SSO,Jive的Proxy模式等等等等,且又是role又是group,真是头都大了,先写个简单的实现方法,以后再研究高深的。

    此方法不依靠容器 框架,适用于小系统(主要jsp页面要少于100,因为是硬编码到JSP),适用于要精确控制页面field的情况较多的系统。

    (插句话:要分清权限控制与业务逻辑,业务逻辑就是情况由系统运行时的某些条件决定,如学生治理系统中,某一学生进入系统,只能看自己的记录,因为可看的记录是由学号来决定的,所以这是业务逻辑,而又如学生不能看老师的记录,这是有学生的身份来决定的,所以这是权限控制。)

    好了,进入正题!
    建表:
  
  
  

    user(user信息: userID userPassWord 等)
    role(role描述:roleID roleDesc)
    permission(permission描述:permissionID permissionDesc)
    user-role(user role对应关系表:userID roleID)
    role-permission(role permission对应关系表:roleID permissionID)
    user-permission(user permission对应关系表:userID permissionID)


    重要申明:

    1 此处role没有继续关系,只是permission的集合

    2 user-permission表只是为了方便,其数据是根据user-role role-permission两表得来,只有在user-role role-permission两表有更新的时候更新此表,并不能单独赋予user某个permission,只能赋予user一个或多个role。

    3 permission的分配,这是一个难点,很多比较复杂的权限控制系统也是因为这个才发展出来,此处把它尽量想简单,不考虑业务逻辑,以页面为视角,分两层,首先是需要控制的jsp页面,然后是需要控制的页面field(包括link,text,textbox,button等等),field这一层还有privilege之分(R和W,即可读和可写)

    基本思路:进入JSP页面时,检查用户信息,查到用户有此permission就包含此代码,假如没有此permission就不包含此代码,此功能由Tag来完成(不会写Tag?不要紧,抄!)。看代码吧!

      1 建表(如上)
      2 建两个class(bean) (UserProfile是用户基本信息   UserPermission是permission )
  
  
  

      UserProfile.Java:
  package com.××.××.××;
  import java.util.Collection;

  public class UserProfile {
    private String userId;
    private String userType;
    private String companyNo;
    private String companyName;
    private String companyType;
    private Collection userPermissions;


  
  
  

  

  
  
  

    public String getUserId() {
      return userId;
    }
    public void setUserId(String userId) {
      this.userId = userId;
    }
    public String getUserType() {
      return userType;
    }
    public void setUserType(String userType) {
      this.userType = userType;
    }
    public String getCompanyNo() {
      return companyNo;
    }
    public void setCompanyNo(String companyNo) {
      this.companyNo = companyNo;
  
  

精彩图集

赞助商链接