什么是角色过滤,如何实现?
发布日期:2010-4-6 信息来源:http://www.chysoft.net

一、实现描述
角色过滤实际上是从定义的静态角色(承元资源管理中定义的用户组)中过滤掉一部分不需要的用户组成员,举例如下:
1、开发实现net.chysoft.group.I_GroupFilter的Java类DepartmentLeader,该类将不属于当前用户的部门负责人的用户过滤掉。
2、手动在数据库表Jbpm_GroupFilterDefine中添加一条记录,设置名称(部门负责人),设置对应的class(net.chysoft.group.DepartmentLeader);
3、在资源管理中定义一个,假设为“用户组A”, 将所有的部门负责人用户添加到该用户组。
4、进入工作流中进行任务许可,某一任务时添加许可的用户组为“用户组A”
5、点击任务中已经许可的“用户组A”,设置条件过滤,设置过滤和过滤的参数。

二、代码示例
(从定义的角色中过滤掉非当前用户的部门负责人部分)
package net.chysoft.group;

import java.sql.Connection;
import net.chysoft.common.MemberNameProxy;
import net.jbpm.common.I_GroupFilter;
import net.sysmain.util.StringTools;

public class DepartmentLeader implements I_GroupFilter
{
private MemberNameProxy proxy = MemberNameProxy.getInstance();
private MemberNameProxy.SimpleDepartment userDepartment = null;
/**
* 递归的最高级别
*/
private int level = 1;

/**
* 初始化,返回当前用户的上级部门负责人
*/
public void init(String currentUser, Connection conn)
{
/**
* 返回当前用户所在的部门
*/
userDepartment = proxy.getDepartmentByUserId(currentUser);
}
 
public void setWorkflowToken(Object token)
{//传递JBPM的工作流toke示例
 s
}

public void setFilterExpression(String expression)
{//获取条件过滤的参数,该参数是在工作流中设置的参数中(程序根据需要处理)
if(StringTools.isInteger(expression))
{
this.level = Integer.parseInt(expression);
}
}

/**
* 判断当前用户是否在过滤的范围之内
*/
public boolean isUserInGroup(String groupUserId)
{
if(userDepartment == null) return false;

String _hierarchy = userDepartment.getHierarchy();
while(_hierarchy.length() >= level* 5)
{
MemberNameProxy.SimpleDepartment dp = proxy.getDepartmentByHierarchy(_hierarchy);
if(dp.getPrincipal() != null && dp.getPrincipal().equals(groupUserId))
{//如果是当前部门的负责人
/**
* 找到部门负责人
*/
return true;
}
_hierarchy = _hierarchy.substring(0, _hierarchy.length()-5);
}

return false;
}
}

粤ICP备11095012号-1
Copyright 2005-2017 深圳市承元软件技术有限公司