报表权限类接口
为了满足不同应用对报表资源访问控制的权限要求,可通过实现报表权限接口进行权限定制。
目录WEB-INF\lib\unieap-report-manage.jar\com\neusoft\report\sample\下提供了权限接口?的实现样例。
1 使用步骤
使用报表权限类接口的详细步骤如下:
1.实现com.neusoft.report.engine.security.AppSecurity接口,该接口是权限实现的接口;
2.实现com.neusoft.report.engine.security.SecurityFactory接口,该接口是获取权限实现的工厂;
3.在\WEB-INF\conf\unieap\report\report-engine-config.properties文件中配置使用的安全工厂类。默认的配置为:
com.neusoft.report.engine.security.factory=com.neusoft.report.sample.security.ExampleSecurityFactory
使用自实现的安全工厂类替换等号右侧部分。
4.调用com.neusoft.report.engine.security.Security接口来对报表的权限进行控制。
2 AppSecurity接口
2.1 简介
AppSecurity接口是负责回答诸如“当前用户是谁”一类的问题,不同应用系统根据实际情况定制自己的权限。
2.2 使用说明
接口中需要实现的方法包括登陆验证、是否为管理员、获取用户角色等,详细如下:
public String getCurrentUserId()获得系统当前的登录用户编号;
public String getCurrentUserId(HttpServletRequest request) 获得当前的登录用户编号,用于报表设计器 Web Service 连接验证;
public Iterator getRolesByUser(String userId) 获得用户的角色;
public boolean isAdmin(String userId) 判断用户是否是管理员,管理员对资源拥有全部的权限;
public boolean login(String userName, String password) 实现用户登录,此方法仅为非UniEAP集成设计器登录使用。登录成功后需要为getCurrentUserId(HttpServletRequest)方法提供当前用户ID信息;
public boolean login(String userName, String password,HttpServletRequest request) 实现用户登陆,在引擎端使用(现阶段用于通过httpRequest方式预览报表);
public boolean isLogin(String userName,HttpServletRequest request) 判断用户是否登陆,在引擎端使用(现阶段用于通过httpRequest方式预览报表)。
3 SecurityFactory接口
3.1 简介
SecurityFactory接口是用来得到AppSecurity接口的实现类,方便不同应用定制的需要。
3.2 使用说明
接口中仅包含一个AppSecurity getNewSecurity()方法,方法中返回一个AppSecurity接口的实现。
4 Security接口
4.1 简介
当实现AppSecurity和SecurityFactory两个接口后可以使用UniEAP? Report提供的Security接口进行权限的操作。Security是对外的主要接口,定义了报表权限体系内的各种常量和方法。
4.2 使用说明
4.2.1 常量定义
本接口对于常量有如下定义:
权限主体的定义如下表所示:
表格 2 权限主体定义
权限主体 | 常量名称 |
---|---|
用户 | SUBJECT_USER |
角色 | SUBJECT_ROLE |
权限主体就是权限模型中的授权对象,报表系统的权限模型中支持两种权限主体,一种是用户,另一种是角色;大多数的应用系统主要支持基于角色的授权,但在一些应用系统中也需要基于用户的授权,报表系统同时支持这两种授权方式,有利于和各种应用系统的有效集成。
资源类型的定义如下表所示
表格 3 资源类型定义
权限主体 | 常量名称 |
---|---|
目录资源 | RESOURCE_FOLDER |
文件资源 | RESOURCE_REPORT |
权限常量的定义如下表所示
表格 4 权限常量定义
权限主体 | 常量名称 |
---|---|
读/列出/查看 | PERMISSION_READ |
创建 | PERMISSION_CREATE |
写/修改 | PERMISSION_WRITE |
删除 | PERMISSION_DELETE |
执行 | PERMISSION_EXECUTE |
4.2.2 方法定义
Security主要提供权限访问和设置方面的方法,包括:
权限访问方法
hasAnyPermission :判断用户或角色是否具备某一权限;
grantPermission:为用户或角色授予权限;
revokePermission:取消用户或角色的指定权限;
setPermission:设置用户或角色的权限;
getPermission:获得用户或角色所拥有的权限。
需要特别强调的是grantPermission和setPermission的不同:grantPermission是授予用户或角色特定的权限,这个授权不影响用户或角色原来拥有的其它权限,例如,用户原来对某资源拥有读的权限,当通过grantPermission授予他写权限以后,用户就具备了对该资源读和写的权限,新授予写权限的动作不会影响用户原来具备的读权限。而setPermission是直接设定用户或角色对资源的全部权限,这种设定动作会影响到用户或角色原来的权限。
revokePermisson和grantPermisson方法类似,只是收回用户或角色指定的权限,而不影响用户或角色原有的其它权限。
其它方法
public AppSecurity getAppSecurity():获得AppSecurity的接口实现;
public synchronized static Security getInstance():获取Security类的实例。
下面的代码片段说明了如何使用Security为报表授权
Security security = Security.getInstance();
Int subjectType = SUBJECT_USER;
String subjected = “admin”
Int resType = RESOURCE_REPORT;
String resId = “a1”;
Int permission = PERMISSION_CREATE;
security.setPermission(subjectType, subjectId, resType, resId, permission);