比如要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权限控制技术
分享到:
相关推荐
5. **安全性与权限管理**:在企业环境中,安全性和权限控制至关重要。理解Jive的用户认证、授权机制,以及如何设置和管理用户角色,是确保系统安全的基础。 6. **性能优化与部署**:在实际生产环境中,了解如何优化...
可通过Web管理界面动态设定论坛资源的用户访问权限。 论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件, 方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分...
**Jive Web管理**是Jive论坛的一个关键组成部分,它提供了全面的后台管理系统,允许管理员进行用户管理、内容监控、权限设置、论坛配置等一系列操作。Web管理界面通常具有直观的图形用户界面,使得非技术背景的管理...
Jive的用户认证和权限管理是另一个值得关注的点。它实现了基于角色的访问控制(RBAC),允许管理员定义不同的角色,并为每个角色分配特定的操作权限。这不仅确保了用户的安全,也为论坛的管理提供了灵活性。此外,...
JIVE中的用户权限管理,通过装饰器可以动态添加或移除用户的操作权限。 5. **适配器模式**:将不兼容接口的对象转换为可一起工作的接口。比如,将不同来源的数据源(如RSS、API)适配成统一的论坛消息格式。 6. **...
可通过Web管理界面动态设定论坛资源的用户访问权限。 论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件, 方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分功能...
在这里,我们可以看到Jive如何实现用户管理、权限控制、消息系统、论坛等功能。通过阅读和理解这些源码,Java开发者可以提升对Spring框架、RESTful API设计、多线程编程以及安全性等方面的理解。 4. **build**: ...
源代码中的JdonFramework是Jive的重要组成部分,这是一个轻量级、高效的框架,用于构建可扩展和高性能的Web应用程序。JdonFramework的设计理念是“简洁、灵活”,它提供了一种模块化的方法来组织和管理应用的组件,...
在用户管理中,Jive论坛可能采用了策略模式,为不同类型的用户提供不同的服务策略,如普通用户、管理员、版主等。此外,可能会用到代理模式,为用户操作提供缓存或者安全过滤等功能。 在论坛版块和主题发布部分,...
<br> 权限设计 1 权限系统概要 2 关于权限设计方面的问题 3 关于用户角色权限管理一点想法 4 关于权限系统的设计 <br> 缓存系统 1 剖析Jive的缓存机制 ...
在Jive的实现中,单例模式可能被用来管理全局唯一的实例,例如数据库连接池或配置对象。这种模式确保一个类只有一个实例,并提供一个全局访问点,从而避免了资源浪费和管理复杂性。 其次,“工厂模式”也是软件设计...
特别是“权限管理”这一标签,意味着文档将详细阐述如何在Jive环境中设置和控制用户访问权限。 在Jive中,权限管理是确保信息安全和团队协作顺畅的关键环节。这涉及到角色定义、用户组、内容可见性以及操作权限等多...
- `Authorization`:表示授权管理。 - `Query`:用于数据查询。 #### 4. 面向接口编程 - **实现方式**:Jive中的所有核心接口都有相应的数据库实现,例如`DbForum`、`DbForumMessage`等。这种方式使得系统能够...
本篇将基于"Jive学习资料"这一主题,深入探讨Jive的核心概念、主要功能、使用技巧以及在实际工作中的应用。 **一、Jive概述** Jive软件是企业级的社交协作平台,它整合了社交媒体的功能,如即时通讯、博客、论坛、...
5. 安全性:提供权限管理,可以设置不同角色(管理员、版主、普通用户等)的权限,确保信息安全。 Apache Tomcat在其中的角色: 1. 应用服务器:Tomcat是Java EE中的Servlet和JSP容器,负责解析HTTP请求,执行Java...
5. **社交网络架构**: Jive源代码揭示了社交网络平台的核心设计,包括用户身份管理、消息传递、内容发布和权限控制等核心模块。 6. **API与插件系统**: Jive通常提供API(应用程序接口),使得开发者可以扩展其功能...
4. **安全性**:Jive论坛的源码中包含了身份验证、授权、防止SQL注入和XSS攻击的实现,这些都是Web开发中必不可少的安全措施。通过源码分析,可以了解到如何在Java Web应用中实现用户认证和授权。 5. **社区功能...
在Jive中,DbForumFactory负责加载特定的JavaBeans,而ForumFactoryProxy引入了权限控制这一横向切面。Spring框架通过AOP来实现类似的切面逻辑,使得开发者可以专注于业务逻辑,而不必关心横切关注点,如日志、事务...
Jive Forum 可能使用了Spring Security或者Apache Shiro等安全框架,实现了用户身份验证、权限控制及会话管理。 4. **论坛功能** - **话题与帖子**:用户可以创建新话题,发布帖子,并且对已有话题进行回复。 - *...