使用资源管理进行数据权限范围的定制开发
发布日期:2010-3-7 信息来源:http://www.chysoft.net

在应用系统的开发中我们经常会遇到对数据范围的控制,如,某类用户只能浏览指定范围的数据,部门负责人可以浏览所有部门的数据等。资源管理提供了数据范围权限的设置和简易的开发实现,基本操作如下:
一、设置栏目数据范围权限
1、进入资源管理的服务项目管理(栏目管理)
2、选中某一需要进行数据范围权限的栏目,设置管理范围授权的允许属性选中并保存,返回时出现“管理范围授权”。
3、进入“管理范围授权”,按用户或用户组进行授权,并授予对应的管理范围。

二、 定制与开发中进行控制
(以下是一个模板action,通过action修改查询的sql语句,也可以在其他代码开发中使用)
import net.business.engine.common.I_TemplateAction;
import net.business.engine.common.TemplateContext;
import net.sysplat.access.Authentication;
import net.sysplat.access.RangeSQLFilter;
import net.sysplat.common.Operator;
import net.sysplat.common.Util;

public class TestSearchAction implements I_TemplateAction
{

public int execute(TemplateContext context) throws Exception
{
HttpServletRequest request = context.getRequest();
int resId = 120; //授权的栏目ID,在此栏目上设置管理范围
//返回资源管理的用户对象
Operator operator = Authentication.getUserFromSession(request);

//返回原始的查询定制SQL语句,如果是其他的飞action开发则是其他的sql
String sql = context.getListObjectPara().getQuerySql();

//初始化权限过滤器类
RangeSQLFilter rangeFilter = new RangeSQLFilter(operator,
resId, RangeSQLFilter.RANGE_TYPE_ALL);

//设置当前数据库表的部门字段和表别名,是以用户还是部门标记数据归属
rangeFilter.setDepartmentIdField("BelongDeptId", "cti");
//传递数据库连接(可省)
rangeFilter.setConnection(context.getConn());

//必须,设置原始的SQL语句
    rangeFilter.setSqlString(sql); 

    //用运算的sql语句修改查询的sql语句
context.getListObjectPara().setTransitionSql(rangeFilter.getFinalSql());
//System.out.println(rangeFilter.getFinalSql());
return SUCCESS;
}

public String getErrorMessage()
{
// TODO Auto-generated method stub
return null;
}
}

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