报表权限类接口

为了满足不同应用对报表资源访问控制的权限要求,可通过实现报表权限接口进行权限定制。

目录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);

results matching ""

    No results matching ""

    results matching ""

      No results matching ""