使用JBoss jBPM实现流程访问和执行的授权
2010-05-11 00:00:00 来源:WEB开发网清单 4 授权拦截器
为了保护命令实现,我们创建了一个新类,它扩展了现有的命令,增加了一个带注解的方法(清单5),返回给定命令可用的键值。
@AuthorizedCommand(role = ACL.STARTER, key = NavteqAuthorizationSession.PROCESSID)
public String getProcessDefinitionKey() {
return processDefinitionId;
}
清单 5 给启动流程实例命令引入授权信息
根据所提议的方法,我们对下列命令进行了注解:
删除部署
启动流程实例
启动最近的流程实例
结束流程实例
删除流 程实例
扩展查询
引入授权意味着查询结果应该只返回用户被授权查看的信息。这可以通过扩展现有查询的where语句实现(清单6)。
//check authorization
String userId = EnvironmentImpl.getCurrent().getAuthenticatedUserId();
List<Group> userGroups = EnvironmentImpl.getCurrent().get(IdentitySession.class).findGroupsByUser(userId);
hql.append(", " + ACL.class.getName() + " as acl ");
appendWhereClause("acl.deployment=deployment and acl.type='"
+ ACL.STARTER + "' ", hql);
appendWhereClause("((acl.userId in "
+ Utils.createHqlUserString(userId) + ") or " + "(acl.groupId in "
+ Utils.createHqlGroupString(userGroups) + ")) ", hql);
清单 6 为流程定义查询提供授权支持的额外where语句
额外的where语句是通过扩展现有查询实现和覆盖hlq方法实现的。
更多精彩
赞助商链接