第1章 概述

SaCa Dataviz 是一个自助式可视化分析工具,而当在应用系统中需要使用本产品时,常常会面临与已有系统集成整合。

本文对DataViz集成中的若干话题一一介绍,部分篇幅较大的话题如CAS会另在其他文档中介绍。

第2章 应用集成

Dataviz应用分为前台的html页面和后台的REST接口服务,两部分是完全分离的,所以在整体应用层面,集成的方式可以分为两种:嵌入式集成和非嵌入式集成。

2.1 嵌入式部署

嵌入式集成就是把DataViz的工程与业务系统的工程在代码层面进行集成。DataViz是一个Web程序,属于B/S架构,并且是前后端分离的,前端使用Angular.js+Bootstrap实现,后端(服务端)使用SpringMVC5.3+Hibernate5.6框架实现。 虽然可以满足大部分部分的定制化需求,但是要把所有DataViz的内容都融合到业务系统中,除了需要融合各种配置文件,还需要解决不同版本的jar带来的各种冲突问题,集成成本非常高,日后的升级维护几乎不可行。所以我们是不推荐这种集成方式的。

2.2 非嵌入式部署

非嵌入式集成就是在系统功能层面进行集成,Dataviz与业务系统分开部署,也方便后续的升级和维护,我们比较推荐这种集成的方式。 非嵌入式的集成主要实现原理就是通过在业务系统页面中嵌套一个iframe,然后在iframe中引用想要显示的DataViz页面的URL。

这种集成方式共有两种实现思路:无需权限校验的集成和需要权限校验的集成。

2.2.1 无需权限校验的集成

无需权限校验的集成非常简单,DataViz中的图表和图册都是支持公开分享功能的,鼠标悬浮在资源块上,或者在资源编辑页面上方的toolbar 上,都能找到分享按钮,如下图: doc/01 doc/01 通过公开分享功能我们就可以得到一个分享链接,如下图: doc/01
分享链接可以让我们在未登录的情况下访问资源,即:只要网络互通,有浏览器就可访问分享的资源。这样,在集成的时候只需要在系统页面的iframe中把URL这只为分享链接们就可以达到集成的效果。 【注意】分享功能为产品付费模块,产品默认不开放此功能。

需要权限校验的集成则复杂一些,首先需要对登录和身份认证进行集成,然后还需要对用户、组织和角色进行数据互通,具体细节和方法可以查看下面几个章节。

第3章 登录与身份认证

SaCa DataViz 的后台服务使用了标准的Spring Security实现的登录认证及会话管理,配置文件WEB-INF/conf/spring/applicationContext-security.xml 默认配置提供了用户名密码表单认证登录,及session状态维护。因此大体上可以按照一般Spring Security的方法进行登录和认证的集成。

3.1 独立部署下的登录集成

当DataViz后台独立于业务系统运行时,依赖实际使用场景需求以及DataViz与业务系统的会话集成程度不同,大致可以分为以下几种集成方式。

3.1.1 单一身份无登录集成

SaCa DataViz 中始终使用默认的身份,无需登录及身份认证,所有的访问在DataViz中都是唯一的匿名用户,DataViz内置的安全访问限制没有了效果,一般适用于一些不直接面向最终用户的场景。此方式集成最为简单,可直接使用DataViz自带提供的 nosecure 配置文件替代默认的applicationContext-security.xml即可完成。

3.1.2 简单URL登录集成

一些场景下,应用系统仅需要在特定位置访问DataViz中已定义好的特定的用户资源,而这些资源需要在已登录状态下使用,这种情况下可以采用简单URL用户名密码传参方式实现登录的同时访问目标地址。

3.1.2.1 使用

此功能需要修改配置开启。修改前台应用的config.js配置文件(路径:\dataviz-web\common\config.js),将urlLogin的值改为true。

urlLogin: false,                         //是否开启URL传参登录功能

默认状态下分享链接是不需要登录验证的,所以urlLogin配置不能控制分享链接。如果分享链接也需要登录验证需要开启看另一个配置:

sharePlayUrlLogin: false,      //是否开启播放分享链接的传参登录功能

完成设置后,可以使用URL传参登录功能。只需在正常的访问连接中加入两个参数:loginname和token,例如:

其中loginname为登录账号,token为登录令牌,用以校验登录账号是否可以合法登录, 两者不能同时为空 。该参数会被发送到后台服务,关于认证的处理方法请参见认证部分TokenValidator 验证

3.1.3 第三方身份登录集成

在互联网应用场景中常常需要使用第三方身份形式登录系统,借助Spring Security提供的扩展能力,DataViz可以实现常见的第三方身份登录方式。具体内容可以参阅相应文档:

3.1.4 依赖业务系统的登录集成

一些场景下,SaCa DataViz 虽然直接面向最终用户,但是作为一个相对独立的附加功能使用,例如从一个门户系统跳转访问,此时SaCa DataViz虽然也需要区分的用户,但用户都是通过外部门户访问,并不直接访问DataViz应用。两者的会话关联并没有很强的联系,DataViz 需要借助业务系统的入口访问,此时可以采用一种相对简单的方法进行集成:在业务系统中完成登录后立即向DataViz后台接口发送认证请求,在DataViz中认证成功后自动完成登录。

3.1.4.1 实现

登录请求可以使用表单POST到 DataViz 服务 /login 接口,默认用户名参数为a,密码参数为p。传递后的身份认证处理请参见基于 DaoAuthenticationProvider 的认证 部分的说明。

3.1.5 单点登录集成

单点登录集成是最为全面的登录集成方式,它在业务系统和DataViz之外引入了第三方的单点登录系统,业务系统和DataViz都通过集成单点登录系统完成身份认证与登录,可以最大程度地保证应用系统和DataViz的登录状态一致,这也是需要和业务系统用户进行登录集成时DataViz推荐的登录集成方式。

目前,DataViz 已验证支持最好也是使用最多的单点登录系统是 Apereo CAS 单点登录系统。关于Apereo CAS 系统的介绍可以参考 Apereo CAS 单点登录系统使用介绍。DataViz提供了基于自身Spring Security的CAS集成方法,具体步骤请参见 CAS 单点登录集成

3.2 嵌入式集成的登录

将DataViz嵌入到业务系统中,意味着两个系统技术匹配度较高,在登录会话层面上可以直接利用已有业务系统的登录,需要特殊注意的是DataViz后台是一个REST服务,所有接口均使用/service路径前缀,对于DataViz服务REST接口的认证拦截需要配置DataViz自带的返回HTTP 401,而不是业务系统中自己的设置。

由于这种集成方式非常少见,且使用这种方式的集成者应该对Spring Security的配置也较为熟悉,这里不再详细描述该方式的配置方法。

3.3 基本身份认证

身份认证是登录的步骤之一,主要用于独立、半独立部署时使用URL登录或依赖业务系统登录的情况,它在多数情况下会与用户集成相关,关于用户集成的部分请查看后续章节。

SaCa DataViz使用Spring Security处理登录时的身份认证,因此所有的身份认证的集成都是在Spring Security的框架内进行。

3.3.1 Spring Security 身份认证接口

Spring Security 身份认证机制的接口是org.springframework.security.authentication.AuthenticationProvider 它决定了认证的方法,对输入的认证Token进行验证,成功后返回一个包含用户登录信息的Authentication对象代表认证成功,若失败则抛出相应的异常。

其配置位于applicationContext-security.xml 的 <authentication-manager alias="authenticationManager"> ... </authentication-manager> 中。

它有两个常用的实现类是org.springframework.security.authentication.dao.DaoAuthenticationProviderorg.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider

3.3.2 基于 DaoAuthenticationProvider 的认证

该接口是DataViz用户名密码表单登录时使用的实现。它会调用注入的 org.springframework.security.core.userdetails.UserDetailsService 对象获取用户身份相关信息 org.springframework.security.core.userdetails.UserDetails, 然后使用UserDetails信息与用户输入的密码或Token进行比较验证。

3.3.2.1 UserDetailsService

  public interface UserDetailsService {
    /**
     * @param username 登录名
     */
      UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
  }

在进行身份验证集成时,集成者可以添加自己的UserDetailsService实现, 方法返回 UserDetails 对象(必须包含credential),并设置相应的角色,然后修改 applicationContext-security.xml中的 userDetailService bean的配置,实现登录用户信息的获取。但 如果需要DataViz和已有系统做用户集成,则应该实现用户集成接口的方式实现身份获取 ,这是DataViz更推荐的方式。

3.3.2.2 认证校验

取到身份信息后,需要做密码/Token比较验证,这里会使用到org.springframework.security.crypto.password.PasswordEncoder接口。

public interface PasswordEncoder {

    /**
     * 加密方法,对传入的字符串进行加密,返回加密后的字符串
     * @param 加密前的字符串
     */
    String encode(CharSequence rawPassword);

    /**
     * 密码验证方法,比较加密前和加密后的字符串是否匹配
     * 对rawPassword进行加密,在与encodedPassword比较
     * @param 加密前的字符串
     * @param 加密后的字符串
     * @return 
     */
    boolean matches(CharSequence rawPassword, String encodedPassword);

}

DataViz自带的用户名/密码方式的验证使用的是 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 实现,如果集成时使用的密码是明文存储,可以配置为org.springframework.security.crypto.password.NoOpPasswordEncoder,如果使用特定的规则,则可以添加自己的实现。

该配置在 applicationContext-security.xml 的 bcryptEncoder bean。

3.3.3 TokenValidator 验证

TokenValidator 验证是DataViz中内置提供的基于 Spring Security PreAuthenticatedAuthenticationProvider 认证接口实现的一种身份认证集成方式,它不针对特定地址进行登录验证,而是对所有后台请求地址,依据请求的参数名,调用自定义实现的身份验证逻辑,然后完成登录,最后继续原请求的内容。它目前在简单URL登录集成方法中被使用。

3.3.3.1 使用方法

需要编写一个 com.neusoft.saca.dataviz.authentication.springsecurity.filterlogin.usertoken. TokenValidator (dataviz-security.jar) 的实现类:

public interface TokenValidator {

    /** 
     * 身份验证,传入的参数对应请求中传入的两个参数
     */
    public UserBO validate(String loginName, String token) throws Exception;
}

返回值中的属性:

属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
role Integer 系统角色:0:普通用户,1:管理员,默认为0
state Integer 状态,-1:无效,1:有效,默认为1

加入到后台服务后,于后台服务applicationContext-security.xml中添加bean配置:

  <beans:bean id="tokenValidator" class="ValidatorImplementationClassName" />

其中 ValidatorImplementationClassName 为实现类的完整类路径。

3.3.4 基于 LDAP 的认证

除了上述两种方式外,实际集成时还常遇到用户信息存储于统一的LDAP目录服务上,需要基于目录服务中的信息进行用户认证的情景。此时仍然可以基于Spring Security的配置进行。

3.3.4.1 LDAP 服务器配置

于 applicationContext-security.xml 中启用以下配置添加 LDAP 目录服务器,其中 / 后面的路径指定顶级后缀,manager-dn 和 manager-password 为服务器访问的管理员用户名密码,如果匿名访问则应去掉:

  <ldap-server url="ldap://ldap.server:389/dc=dataviz,dc=com" manager-dn="cn=manager,dc=dataviz,dc=com" manager-password="password" />

3.3.4.2 用户DN获取

认证时需要将用户登录输入的用户名映射为LDAP中的一个DN,Spring Security 支持两种方式进行映射,一种是简单替换拼接,一种是通过LDAP搜索。

3.3.4.2.1 简单替换拼接

当所有用户在LDAP中存储在同一节点下的层级时,可以使用这种映射方式,其配置方式为启用 authentication-manager 标签下的以下标签:

   <ldap-authentication-provider user-context-mapper-ref="ldapUserDetailsContextMapper" user-dn-pattern="cn={0}" />

在该配置下,用户名会被替换到{0}位置,映射的DN为 cn=loginName,dc=dataviz,dc=com

3.3.4.2.2 LDAP 搜索

当不满足用户存储在同一节点下的层级时,可以使用LDAP搜索方式映射用户。其配置方式为启用 authentication-manager 标签下的 ldap-authentication-provider 标签,并进行如下修改( user-search-base 为可选 ):

   <ldap-authentication-provider user-context-mapper-ref="ldapUserDetailsContextMapper" user-search-filter="(cn={0})" user-search-base="ou=people" />

在该配置下,使用的用户DN是通过在 ou=people,dc=dataviz,dc=com 下 LDAP 搜索 (cn=loginName) 的结果(结果不能为多个)。

3.3.4.3 密码比较验证

在以上配置下,已经可以通过登录名获取的用户DN及密码采用 LDAP bind 操作完成身份认证,这是一种简单有效的配置方式。

除 bind 方法外,Spring Security也支持另外两种验证方法:密码LDAP比较及本地比较。由于这两种方法都是在不做 bind 认证操作下直接对用户密码属性进行操作,通常服务器对密码的访问都会有安全限制,因此是相对不常用的验证方法。

  • LDAP 比较验证

    LDAP 比较验证使用 LDAP compare 操作将验证输入的密码发送到服务器上指定的密码属性进行比较,从而判断是否验证通过。配置方法是在 ldap-authentication-provider 节点下,添加 <password-compare> 节点,其中 password-attribute 属性指定密码属性名(默认为 userPassword):

        <password-compare password-attribute="userPassword"/>
    
  • 本地比较

    本地比较即将用户的密码属性从LDAP服务器上获取过来,然后在服务器上比较。配置方法为在 password-compare 下额外配置 password-encoder 标签(ref 属性指定一个 org.springframework.security.crypto.password.NoOpPasswordEncoder bean:

    <password-compare>
        <password-encoder ref="noOpPasswordEncoder" />
    </password-compare>
    
        <beans:bean id="noOpPasswordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder"/>
    

3.3.4.4 关于管理员权限

在经过以上配置后,系统已经可以通过LDAP使用目录服务中的用户进行登录验证。在没有做用户集成时,所有的用户都会被认证为DataViz普通用户,而不会有管理员用户。DataViz默认提供的实现类提供了一种方法,可以在不做用户集成的情况下,通过检查目录服务中用户Entry属性的方式设置管理员(如果需要做用户集成则可以略过此节):如果其属性值中包含特定的属性值则认为是管理员,否则为普通用户。(也可以设置多个值,符合其中一个即可)方法是修改 ldapUserDetailsContextMapper bean的配置,添加 adminAttributeNameadminAttributeValues 属性:

    <beans:bean id="ldapUserDetailsContextMapper" class="com.neusoft.saca.dataviz.authentication.springsecurity.DefaultUserDetailsContextMapper">
        <beans:property name="adminAttributeName" value="ou" />
        <beans:property name="adminAttributeValues" value="administrators" />
    </beans:bean>

如果已经做了用户集成,则会按用户集成后的用户信息确定管理员,此处的设置没有作用。

3.3.4.5 关于用户ID、组织机构与角色

在进行LDAP 登录后,用户ID默认即为用户的DN,而用户的组织机构及角色需要依靠用户、组织机构及角色的集成。使用LDAP登录,此时做集成时,当用户DN不会超过64个字符时,可以直接使用用户的LDAP DN作为ID。如果用户DN可能超过64个字符,那么支撑库可能无法记录超长的用户ID数据,此时应该使用其他更短的值(如RDN、UUID)作为用户ID。

在不使用用户DN作为ID的情况下,需要额外更换登录用的 ldapUserDetailsContextMapper bean的实现类,继承 com.neusoft.saca.dataviz.authentication.springsecurity.DefaultUserDetailsContextMapper 类,重写其中的 getUserId 方法。

    protected String getUserId(DirContextOperations ctx, String loginName) {
        return ctx.getNameInNamespace(); // dn
    }

3.4 无会话状态的身份验证

在DataViz独立、半独立部署方式下,除了最常见的会话登录方法外,由于使用的Spring Security安全框架,SaCa DataViz 也能够支持一些诸如基于JWT实现的无会话状态的身份验证。

集成基于如下思路:

  1. 将登录后的Token通过某种方式放到DataViz后台应用可访问位置,如Cookie中;
  2. 配置所有地址的 create-sessionstateless,即不创建session;
  3. 对所有配置了stateless 的地址应用 PRE_AUTH_FILTER 过滤,过滤器继承AbstractPreAuthenticatedProcessingFilter,在实现中读取请求中包含的token,最后添加PreAuthenticatedAuthenticationProvider 实现完成token验证。

集成者可以以上思路手动实现,也可以利用 DataViz 内置的TokenValidator (基于PreAuthenticatedAuthenticationProvider的实现)和Filter实现,集成时开发者可以视情况选择。

以下提供基于DataViz内置TokenValidator和Filter,从Cookie中读取验证Token的实现方法说明。

3.4.1 配置修改

修改applicationContext-security.xml文件:

  1. 将其中所有 create-session="ifRequired" 的配置替换改为 create-session="stateless"
  2. 查看所有 create-sessionstateless的http标签,确保其下含有配置 <custom-filter position="PRE_AUTH_FILTER" ref = "preAuthenticatedFilter"></custom-filter>,如果没有则复制添加到该标签元素下。
  3. 检查所有http create-sessionstateless的元素,确保其下不包含类似以下配置:

    <session-management …></session-management>
    <custom-filter position="SESSION_MANAGEMENT_FILTER" …> </custom-filter>
    
  4. 修改bean preAuthenticatedFilter,将class替换为 com.neusoft.saca.dataviz.authentication.springsecurity.filterlogin.CookiePreAuthenticatedFilter 并去掉原property配置,改为 cookieName, cookiePath,cookieDomain,分别对应包含认证信息的cookie的名、路径及域。名字为必选,路径和域为可选。如果不写路径和域,则按名称匹配读取到的第一个cookie值。

  5. 将编写的cookie验证类的类名替换到id为 tokenValidator 的bean下。

3.4.2 验证类实现

验证类利用TokenValidator,需实现 com.neusoft.saca.dataviz.authentication.springsecurity.filterlogin.validate.TokenValidator 接口,该接口仅包含1个方法:

      UserBO validate(String loginName, String token)

当使用提供的cookie配置类时,只需使用loginName,其中的值为前台传到后台对应的cookie值。在验证通过后,需返回UserBO Java bean对象,包含验证成功的用户信息,若失败则可抛出异常。

UserBO对象主要属性:

    /**
     * 用户ID
     */
    private String id;
    /**
     * 用户名称
     */
    private String name;
    /**
     * 登录ID
     */
    private String loginID;
    /**
     * 用户状态,1:有效,-1:无效
     */
    private Integer state = STATE_NORMAL;
    /**
     * 用户角色,0:普通用户,1:管理员
     */
    private Integer role = ROLE_USER;
    /**
     * 自定义参数,会传递到系统变量
     */
    private Object customParams;

如果使用了自定义的Filter,则loginName对应Principal,token对应Credential。

第4章 用户集成

用户集成并不是所有集成的必需内容,如果在集成后需要在DataViz中使用用户、组织、角色相关功能,诸如用户管理、组织管理、角色管理、数据权限、公共项目、看板等功能时,则必须要进行用户集成。

4.1 用户集成

DataViz中提供了用户相关的接口,只要实现这些接口,并将其配置在applicationContext.xml中,DataViz就可以通过这些接口获取业务系统中原生的用户信息,并在Dataviz中正常使用用户的相关功能。

4.1.1 接口说明

  • 接口名称:com.neusoft.saca.dataviz.system.manager.UserManager

  • 所在包:dataviz-system.jar

4.1.1.1 addUser

  //新增用户信息
  public String addUser(UserBO userBO);
传入参数
属性 类型 是否可能为空 描述
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
creatorId String 创建人ID
返回参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)

4.1.1.2 modifyUser

  //修改用户信息
  public void modifyUser(UserBO userBO);
传入参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
creatorId String 创建人ID

4.1.1.3 removeUserById

  //删除用户信息
  public void removeUserById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)

4.1.1.4 getUserById

  //根据用户ID查询单个用户信息
  public UserBO getUserById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
返回参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
createTime Date 创建时间

4.1.1.5 getUserByLoginID

  //根据登录账号查询单个用户信息
  public UserBO getUserByLoginID(String loginID);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID(唯一标识)
返回参数
属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
createTime Date 创建时间

4.1.1.6 changePassword

  //修改登录密码
  public void changePassword(String userId, String oldPwd, String newPwd);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID(唯一标识)
oldPwd String 旧密码
newPwd String 新密码

4.1.1.7 getUsers

  //查询全部用户信息
  public List<UserBO> getUsers();
返回参数

返回用户信息列表,其中UserBO属性包括:

属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
creatorId String 创建人ID

4.1.1.8 getPageUsers(v5.6.02 版本之后新增)

  /**
   * 按页查询用户数据
   * 
   * @param pageIndex 页码,从1开始
   * @param pageCount 每页显示数量
   * @param searchKey 查询关键字,默认为用户名或登录账号
   * @return
   */
  public List<UserBO> getPageUsers(int pageIndex, int pageCount, String searchKey);
传入参数
属性 类型 是否可能为空 描述
pageIndex int 页码,从1开始
pageCount int 每页显示数量
searchKey String 查询关键字,默认为用户名或登录账号
返回参数

返回用户信息列表,其中UserBO属性包括:

属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
creatorId String 创建人ID

4.1.1.9 getUsersCount(v5.6.02 版本之后新增)

  /**
   * 用户的数量,用来分页
   * 
   * @param searchKey 查询关键字,默认为用户名或登录账号
   * @return
   */
  public int getUsersCount(String searchKey);
传入参数
属性 类型 是否可能为空 描述
searchKey String 查询关键字,默认为用户名或登录账号
返回参数

返回用户的数量

4.1.2 用户实体UserBO

属性 类型 是否可能为空 描述
id String 用户ID(唯一标识)
name String 用户名称
loginID String 登录账号
password String 登录密码(加密前)
role Integer 系统角色:0:普通用户,1:管理员
state Integer 状态,-1:无效,1:有效
dataAnalysis Integer 是否使用数据预测功能,0:否,1:是
creatorId String 创建人ID

4.1.3 配置

在applicationContext.xml配置文件中找到

  <bean id="userManager" class="com.neusoft.saca.dataviz.system.impl.UserManagerImpl"></bean>

com.neusoft.saca.dataviz.system.impl.UserManagerImpl替换为新的实现类名称。

4.2 组织机构集成

DataViz中提供了组织机构相关的接口,只要实现这些接口,并将其配置在applicationContext.xml中,在DataViz中就可以通过这些接口获取业务系统中原生的组织信息,并且在Dataviz中正常使用组织机构的相关功能。

4.2.1 接口说明

  • 接口名称:com.neusoft.saca.dataviz.system.manager.OrgManager

  • 所在包:dataviz-system.jar

4.2.1.1 addOrg

//新增组织信息
public String addOrg(OrgBO orgBO);
传入参数
属性 类型 是否可能为空 描述
name String 组织名称
description String 描述备注
parentId String 父级组织ID,如果为最上层组织,则允许为空;否则不可为空。
creatorId String 创建人ID
返回参数
属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)

4.2.1.2 modifyOrg

  //修改组织信息
  public void modifyOrg(OrgBO orgBO);
传入参数
属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
name String 组织名称
description String 描述备注

4.2.1.3 removeOrgById

  //删除组织信息
  public void removeOrgById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)

4.2.1.4 getOrgById

  //查询单个组织信息
  public OrgBO getOrgById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
返回参数
属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
name String 组织名称
description String 描述备注
parentId String 父级组织ID。如果为最上层组织,则允许为空;否则不可为空。

4.2.1.5 getOrgsByUserId

  //查询用户直属组织信息
  public List<OrgBO> getOrgsByUserId(String userId);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID(唯一标识)
返回参数

返回组织信息列表,其中OrgBO属性包括:

属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
name String 组织名称
description String 描述备注
parentId String 父级组织ID。如果为最上层组织,则允许为空;否则不可为空。

4.2.1.6 getUserIdsByOrgId

  //查询组织下直属用户ID
  public List<String> getUserIdsByOrgId(String orgId);
传入参数
属性 类型 是否可能为空 描述
orgId String 组织ID(唯一标识)
返回参数

返回用户ID列表

属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)

4.2.1.7 removeOrgOfUser

//移除组织和用户的关联
public void removeOrgOfUser(String orgId, String userId);
传入参数
属性 类型 是否可能为空 描述
orgId String 组织ID(唯一标识)
userId String 用户ID(唯一标识)

4.2.1.8 updateOrgUsers

//更新组织关联用户的信息
public void updateOrgUsers(String orgId, List<String> userIds);
传入参数
属性 类型 是否可能为空 描述
orgId String 组织ID(唯一标识)
userIds String 用户ID列表(唯一标识)

4.2.1.9 getAllOrgs

//查询全部组织信息
public List<OrgBO> getAllOrgs();
返回参数

返回组织信息列表,其中OrgBO属性包括:

属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
name String 组织名称
description String 描述备注
parentId String 父级组织ID,如果为最上层组织,则允许为空;否则不可为空。

4.2.1.19 getUserRoleByOrgId

/**
 * 根据组织ID查询组织下直属的用户信息
 * 
 * @param orgId
 *            组织ID
 * @return 用户ID -> 用户组织角色 ,0:普通用户,1:组织管理员
 */
public Map<String, Integer> getUserRoleByOrgId(String orgId);
传入参数
属性 类型 是否可能为空 描述
orgId String 组织ID(唯一标识)

4.2.2 组织实体OrgBO

属性 类型 是否可能为空 描述
id String 组织ID(唯一标识)
name String 组织名称
description String 描述备注
parentId String 父级组织ID,如果为最上层组织,则允许为空;否则不可为空。
creatorId String 创建人ID

4.2.3 修改配置

在applicationContext.xml配置文件中找到

  <bean id="orgManager" class="com.neusoft.saca.dataviz.system.impl.OrgManagerImpl"></bean>

com.neusoft.saca.dataviz.system.impl.OrgManagerImpl替换为新的实现类名称。

4.3 角色集成

在DataViz中提供了角色相关的接口,只要实现这些接口,并将其配置在applicationContext.xml中,在DataViz中就可以通过这些接口获取业务系统中原生的角色信息,并且在Dataviz中正常使用角色的相关功能。

4.3.1 接口说明

  • 接口名称:com.neusoft.saca.dataviz.system.manager.RoleManager

  • 所在包:dataviz-system.jar

4.3.1.1 addRole

//新增角色信息
public String addRole(RoleBO roleBO);
传入参数
属性 类型 是否可能为空 描述
name String 用户名称
description String 描述备注
creatorId String 创建人ID
返回参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)

4.3.1.2 modifyRole

  //修改角色信息
  public void modifyRole(RoleBO roleBO);
传入参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)
name String 角色名称
description String 描述备注

4.3.1.3 removeRoleById

//删除角色信息
public void removeRoleById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)

4.3.1.4 getRoleById

//查询单个角色信息
public RoleBO getRoleById(String id);
传入参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)
返回参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)
name String 角色名称
description String 描述备注

4.3.1.5 getRolesByUserId

//查询用户所有的角色信息
public List<RoleBO> getRolesByUserId(String userId);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID(唯一标识)
返回参数
属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)
name String 角色名称
description String 描述备注

4.3.1.6 getUserIdsByRoleId

//查询拥有此角色的用户ID
public List<String> getUserIdsByRoleId(String roleId);
传入参数
属性 类型 是否可能为空 描述
roleId String 角色ID(唯一标识)
返回参数

返回用户ID列表

属性 类型 是否可能为空 描述
Id String 用户ID(唯一标识)

4.3.1.7 removeRoleOfUser

//移除角色和用户的关联
public void removeRoleOfUser(String roleId, String userId);
传入参数
属性 类型 是否可能为空 描述
roleId String 角色ID(唯一标识)
userId String 用户ID(唯一标识)

4.3.1.8 updateRoleUsers

//更新角色关联用户的信息
public void updateRoleUsers(String roleId, List<String> userIds);
传入参数
属性 类型 是否可能为空 描述
roleId String 角色ID(唯一标识)
userId String 用户ID(唯一标识)

4.3.1.9 getRoles

//查询全部角色信息
public List<RoleBO> getRoles();
返回参数

返回角色信息列表,其中RoleBO属性包括:

属性 类型 是否可能为空 描述
id String 角色ID(唯一标识)
name String 角色名称
description String 描述备注

4.3.2 角色实体RoleBO

属性 类型 描述
id String 角色(唯一标识)
name String 角色名称
description String 描述备注
creatorId String 创建人ID

4.3.3 配置

在applicationContext.xml配置文件中找到

  <bean id="roleManager" class="com.neusoft.saca.dataviz.system.impl.RoleManagerImpl"></bean>

com.neusoft.saca.dataviz.system.impl.RoleManagerImpl替换为新的实现类名称。

第5章 权限集成

SaCa DataViz 提供了公共项目访问授权功能,在做业务系统集成时,授权往往都在业务系统中完成,通过权限集成可以实现在业务系统中控制公共项目的权限。

5.1 接口说明

  • 接口名称:com.neusoft.saca.dataviz.common.security.access.DataVizOpenAccessController
  • 所在包:dataviz-common.jar

9.1.1 hasPermission

//判断用户是否对指定资源有指定的操作权限。    
public boolean hasPermission(String userId, String objectId, ResourceType resType, Permission perm);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID
objectId String 资源ID
resType ResourceType 资源类型,枚举类型,可选值为UNKNOWN, PROJECT, DATASET, CHART, CHARTBOOK
perm Permission 资源权限,枚举类型,可选值为CREATE, MODIFY, DELETE, VIEW
返回参数
属性 类型 是否可能为空 描述
result boolean 用户是否对指定资源有指定的操作权限

9.1.2 getPermissions

//获取用户对指定资源的所有权限。
public Set<Permission> getPermissions(String userId, String objectId, ResourceType resType);
传入参数
属性 类型 是否可能为空 描述
userId String 用户ID
objectId String 资源ID
resType ResourceType 资源类型,枚举类型,可选值为UNKNOWN, PROJECT, DATASET, CHART, CHARTBOOK
perm Permission 资源权限,枚举类型,可选值为CREATE, MODIFY, DELETE, VIEW
返回参数
属性 类型 是否可能为空 描述
result boolean 用户是否对指定资源有指定的操作权限

9.2 修改配置

修改 WEB-INF\conf\spring\下的配置文件 applicationContext-security.xml

  <beans:bean id="publicProjectAccess" class="com.neusoft.saca.dataviz.openproject.pub.access.PublicProjectAccess" autowire="byType"></beans:bean>

将class改为实际的实现类。

9.3 权限说明

各资源的权限之间是有依赖关系的,有的权限是由多个权限组成的

  • DATASET(数据集)
    • CREATE:数据集的创建权限
    • MODIFY:数据集的编辑权限,依赖于数据集的查看权限
    • DELETE:数据集的删除权限
    • VIEW:数据集的查看权限
  • CHART(图表)
    • CREATE:图表的创建权限,依赖于数据集的创建权限或者数据集的查看权限
    • MODIFY:图表的编辑权限,依赖于图表的查看权限
    • DELETE:图表的删除权限
    • VIEW:图表的查看权限,依赖于数据集的查看权限
  • CHARTBOOK(图册)
    • CREATE:图册的创建权限,依赖于图表的创建权限或者图表的查看权限
    • MODIFY:图册的编辑权限,依赖于图册的查看权限
    • DELETE:图册的删除权限
    • VIEW:图册的查看权限,依赖于图表的查看权限

results matching ""

    No results matching ""

    results matching ""

      No results matching ""