当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

jive中的权限管理

发表于: 2005-05-18   作者:dazuiba   来源:转载   浏览次数:
摘要: 比如要createForum,那么jive就会这么做: 大体上的思路是,用代理模式,本来ForumFactory 是没有权限的相关方法和属性的,那么,就把这些功能代理给ForumFactoryProxy ,这样就把任务分开了! public class ForumFactoryProxy extends ForumFactory {   ......   public Foru
比如要createForum,那么jive就会这么做:
大体上的思路是,用代理模式,本来ForumFactory 是没有权限的相关方法和属性的,那么,就把这些功能代理给ForumFactoryProxy ,这样就把任务分开了!


public class ForumFactoryProxy extends ForumFactory {
  ......
  public Forum createForum(String name, String description);
    throws UnauthorizedException, ForumAlreadyExistsException
  {
    if (permissions.get(ForumPermissions.SYSTEM_ADMIN);); {
      Forum newForum = factory.createForum(name,   description);;
      return new ForumProxy(newForum, authorization, permissions);;
    }else {
      throw new UnauthorizedException();;
    }
  }
  ......
}


就是这一句:
 if (permissions.get(ForumPermissions.SYSTEM_ADMIN);); {
             //~~~~~~~~~
       }else {
      throw new UnauthorizedException();;
    }


其中permissions是该代理类的一个属性,是在ForumFactory.getInstance中创建变量的最后一个参数。
该参数是这么得到的:

dbforumFactory.getPermissions(Authorization authorizaton);   {
      
        return permissionsManager.getFinalUserPerms(-1, userID);;
}


所以,得到一个权限是和用户的userid联系起来的,而userid在系统中是由 Authorization类来包装的
所以在
permissionsManager.getFinalUserPerms(-1, userID);;
中,应该查询到数据库层,来对用户的权限进行进一步的处理!
在数据库中,权限相关的表格如下:
    UserPerm  (
                                 forumID
                                 userID 
                                 userType 
                                 permission 
                                 );;

              Userid(userType ,userID );
             两个表是多对多关系


 StringBuffer sql = new StringBuffer(
                "SELECT DISTINCT permission FROM bisUserPerm WHERE "
            );;


            if (forumID == -1); {
                sql.append("forumID IS NULL AND ");;
            }
            else {
                sql.append("forumID=");.append(forumID);.append(" AND ");;
            }
			
			
            if (userID == -1); {
                sql.append("userID IS NULL and userType=");;
                sql.append(BisGlobals.ANONYMOUS);;
            }
            else if (userID == 0); {
                sql.append("userID IS NULL AND userType=");;
                sql.append(BisGlobals.REGISTERED_USERS);;
            }			
            else {
                sql.append("userID=");.append(userID);.append(" AND userType=");;
                sql.append(BisGlobals.USER);;
            }
            ResultSet rs = stmt.executeQuery(sql.toString(););;
            while(rs.next();); {
                int newPerm = rs.getInt(1);;
              //!!!~~~~~
                permissions[newPerm] = true;
            }
        }
return new ForumPermissions(permissions);;

返回了一个包装了权限数组的类ForumPermissions

数组permissions中各个元素的意义如下:
boolean read;                      p[0]
boolean systemAdmin;        p[1]
boolean forumAdmin;          p[2]
boolean userAdmin;              p[3]
boolean groupAdmin;          p[4]
boolean moderateThreads; p[5]
boolean createThread;        p[6]
boolean createMessage;      p[7]
boolean moderateMessages; p[8]

比如要添加一个对各个论坛都有管理员权限systemAdmin
insert into UserPerm(forumID,userID,userType,permission)
              values (NULL,1,3,1);
其中第三位userType有以下三种:
匿名用户,游客,注册用户
分别是 11 ,12, 3

既然权限都创建了,下面权限的检查就不是一件难事了~~;
//就本例来说,创建论坛当然要管理员的权限,所以代码如下:
permissions.get(ForumPermissions.SYSTEM_ADMIN););{
 if (type < 0 || type > 8); {
            return false;
        }
        return values[type];
}

下一篇讨论关于切面编程的权限控制:AOP权限控制技术

jive中的权限管理

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
其实做软件,最闹心的是,不知道如何设计页面,如何操作才会方便。在走火入魔通用权限管理系统中是
通用权限管理系统中的版本版权信息设置参考如下效果图 可以在源码里直接进行版权、版本说明 可以通
JOffice中的权限管理是基于角色的管理策略,采用Spring Security2的配置方式,同时能够结合EXT3来进
我们往往需要灵活控制,到底哪些用户可以访问哪些模块菜单,一般要求比较严格的内部信息管理系统都
先来一张图,jive的统一入口: 客户端请求统一经过forumFactory类来处理,然后通过代理来完成各种操
政府性质的单位里很少有人员流动,一般对系统的权限要求都是相对固定一些,所以有时候会有对系统按
我们经常需要实现灵活配置数据列的访问权限控制,例如只有某些用户可以看到“开户行,银行帐户,公
只开发一套业务管理系统,或者只维护一套业务管理系统是相对简单的事情,但是你要同时给多个客户开
只开发一套业务管理系统,或者只维护一套业务管理系统是相对简单的事情,但是你要同时给多个客户开
日常生活中经常会遇到每个公司需要管理每个公司自己的数据,然后由总公司集中管理所有数据的需求。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号