Page tree
Skip to end of metadata
Go to start of metadata

用户集成是系统集成中最常见的要求之一。当有多套系统同时使用时,客户往往希望统一进行用户管理、统一登录认证,也就是说只在一个系统中维护基础用户信息、只登录一次(单点登录)就可以访问不同系统的内容。用户集成包含两个方面内容:

  • 用户同步:指多套系统拥有相同的用户信息,当以外部系统作为统一用户管理平台时,常采用如下两种方式实现 Smartbi 用户同步:
    • 方式一:使用存储过程或 ETL 定时将第三方系统中的用户等信息同步到 Smartbi 用户表中。
    • 方式二:在第三方系统中使用 Smartbi 用户管理的远程调用接口实现用户等信息的同步。
    • 方式三:通过EXCEL导入方式实现用户信息同步。
    • 方式四:通过计划任务同步用户信息,建议使用该方案(请参考 通过计划任务自动同步用户机构和角色)。

  • 用户验证:验证用户是否是合法的系统用户,Smartbi 既可以使用自己的验证体系,也支持使用第三方系统的用户验证体系。

注意事项:Smartbi 还有角色概念,无论哪种集成方式,都要求在 Smartbi “管理 -> 用户管理”模块中创建角色,并设置角色的操作权限和数据权限;用户必须被赋予角色,才能登录 Smartbi 并使用相应的功能。

 

1、同步数据库相关用户表

说明:

可以通过存储过程或 ETL 定时将第三方系统的用户信息同步到 Smartbi 知识库相关的用户表中。同步数据库时涉及到的表如下:

数据表

含义说明

t_group

用户组表,记录用户组(机构)的信息。

t_user

用户表,记录所有用户信息。

t_group_user

用户组与用户对应表。相关字段:t_user.c_userid、t_group. c_groupid

t_role

角色表,记录系统所有角色的信息。相关字段:t_group. c_groupid

t_group_role

用户组与角色对应关系表。相关字段:t_role.c_roleid、t_group. c_groupid

t_user_role

用户与角色对应关系表。相关字段:t_role.c_roleid、t_user. c_userid

t_funclist

操作权限表。

t_role_func

角色与操作权限关系表。相关字段:t_role.c_roleid、t_funclist. c_funcid

 

字段类型:

下文表结构中的字段类型等信息,均是针对 MySQL 5.0 而言,其它数据库类型的对应关系如下表所示:

数据库类型

MySQL

Oracle

DB2

字符串

VARCHAR

VARCHAR2

VARCHAR

整数

INTEGER

INTEGER

INTEGER

浮点数

DOUBLE

DOUBLE

DOUBLE

日期时间

DATETIME

DATE

DATE

长文本

LONGTEXT

CLOB

CLOB

 

注意事项:

  • 同步组:需要同步表t_group,如果需要给组赋角色,则还需同步表t_group_role;
  • 同步用户:需要同步表t_user、t_group_user 、t_user_role;
  • 同步角色:需要同步表t_role;
  • 同步操作权限:需要同步表t_funclist、t_role_func,在表t_funclist中新增操作权限如funcTest,必须把此权限赋予给角色ADMINS,即在表t_role_func中增加一条funcTest与ADMINS的记录。

 

1.1 t_group(用户组表)

t_group 用户组表,记录用户组的信息。通过字段c_orgid,实现用户与机构的关联。

字段名

中文含义

数据类型

约束

c_groupid

组ID

VARCHAR(255)

NOT NULL

c_pgroupid

父组ID

VARCHAR(255)

default NULL

c_groupname

组名称

VARCHAR(255)

default NULL

c_groupalias

组别名

VARCHAR(255)

default NULL

c_groupdesc

描述

VARCHAR(255)

default NULL

c_orgid

机构编号

VARCHAR(255)

default NULL

 

1.2 t_user(用户信息表)

t_user 用户表,记录所有用户信息。

字段名

中文含义

数据类型

约束

c_userid

用户ID

VARCHAR(255)

NOT NULL

c_username

用户名称

VARCHAR(255)

default NULL

c_useralias

用户别名

VARCHAR(255)

default NULL

c_userpwd

用户密码

VARCHAR(255)

default NULL

c_userdesc

描述

VARCHAR(255)

default NULL

c_isenabled

用户是否启用

VARCHAR(255)

default NULL

c_extended

用户扩展信息

LONGTEXT

default NULL

c_defaultgrp

默认组

VARCHAR(255)

default NULL

备注:c_defaultgrp 在新版本中该字段已被弃用。

 

1.3 t_group_user(用户组与用户对应表)

t_group_user 用户组与用户对应表。相关字段:t_user.c_userid、t_group. c_groupid。

字段名

中文含义

数据类型

约束

c_id

ID

VARCHAR(255)

NOT NULL

c_userid

用户ID

VARCHAR(255)

default NULL

c_groupid

组编号

VARCHAR(255)

default NULL

c_isdefault

是否默认组

INTEGER

default NULL

 

1.4 t_role(角色表)

t_role 角色表,记录系统所有角色的信息。相关字段:t_group. c_groupid。

字段名

中文含义

数据类型

约束

c_roleid

角色ID

VARCHAR(255)

NOT NULL

c_rolename

角色名称

VARCHAR(255)

default NULL

c_rolealias

角色别名

VARCHAR(255)

default NULL

c_groupid

组ID

VARCHAR(255)

default NULL

c_roledesc

描述

VARCHAR(255)

default NULL

c_sysid

应用系统ID

VARCHAR(255)

default NULL

 

1.5 t_group_role(用户组与角色对应表)

t_group_role 用户组与角色对应表。相关字段:t_role.c_roleid、t_group. c_groupid。

字段名

中文含义

数据类型

约束

c_id

ID

VARCHAR(255)

NOT NULL

c_roleid

角色ID

VARCHAR(255)

default NULL

c_groupid

组ID

VARCHAR(255)

default NULL

c_isdescend

是否子孙用

INTEGER

default NULL

 

1.6 t_user_role(用户与角色对应表)

t_user_role 用户与角色对应表。相关字段:t_role.c_roleid、t_user. c_userid。

字段名

中文含义

数据类型

约束

c_roleid

角色ID

VARCHAR(255)

default NULL

c_userid

用户ID

VARCHAR(255)

default NULL

 

1.7 t_funclist(操作权限表)

t_funclist 操作权限表。

字段名

中文含义

数据类型

约束

c_funcid

功能ID

VARCHAR(255)

PK

c_funcname

功能中文名

VARCHAR(255)

default NULL

c_funcalias

功能别名

VARCHAR(255)

default NULL

c_funcdesc

功能描述

VARCHAR(255)

default NULL

c_sysid

所属系统ID

VARCHAR(255)

default NULL

c_pfuncid

父功能ID

VARCHAR(255)

default NULL

c_isbuiltin

是否内置操作权限,"1"为是。

VARCHAR(255)

default NULL

 

1.8 t_role_func(角色与操作权限关系表)

t_role_func 角色与操作权限关系表。相关字段:t_role.c_roleid、t_funclist. c_funcid。

字段名

中文含义

数据类型

约束

c_roleid

角色编号

VARCHAR(255)

default NULL

c_funcid

功能编号

VARCHAR(255)

default NULL

 

2、调用API接口实现用户同步

说明:

Smartbi 提供 Java 和 JavaScript 两种 API 供外部系统调用实现用户信息同步。

 

实现步骤:

1、当在第三方系统进行增删用户/用户组等操作时,后台程序调用 Smartbi 提供的 API 接口同步将用户信息同步到 Smartbi 系统中。

2、调用方法请参考开发接口中 服务器端SDK 和 浏览器端SDK 中的操作步骤。


系统方法:

系统提供的用户管理方法示例如下。

方法名

作用

createDepartment(parentGroupId, groupName, groupAlias, desc, departmentCode)

创建用户组。

createRole(roleName, roleAlias, desc, groupId)

创建角色。

createUser(parentGroupId, userName, userAlias, desc, password, isEnabled)

创建用户。

deleteDepartment(groupId)

删除用户组。

deleteRole(roleId)

删除角色。

deleteUser(userId)

删除用户。

getCurrentUser()

获取当前登录用户信息。

getDefaultDepartment(userId,hierId)

获取用户的默认组,hierId为"DEPARTMENT"。

getDepartmentById(id)

通过用户组ID获取用户组信息。

getDepartmentByName(name)

通过名称获取用户组对象。

updateDepartment(groupId, groupAlias, desc, departmentCode)

修改用户组。

updateRole(roleId, roleAlias, desc)

修改角色。

updateUser(userId, alias, desc, password, isEnabled)

修改用户。

assignDepartmentsToRole(roleId,  groupIdList)

给角色分配用户组。

assignDepartmentsToUser(userId,  groupIdList)

修改用户的所属组。

assignRolesToDepartment(groupId,  roleForGroupList)

分配角色给用户组。

assignRolesToUser(userId,  roleIdList)

给用户分配角色。

assignUsersToGroup(groupId,  userIdList)

修改组所拥有的用户。

assignUsersToRole(roleId,  userIdList)

给角色分配用户。

更多具体方法以及帮助请参考 JAVA API文档

Java API 帮助文档。 

 

3、通过EXCEL导入用户实现同步

说明:

Smartbi 提供导入EXCEL信息实现用户信息同步功能。

 

实现步骤:

1、登录Smartbi,参考导入用户信息

下面对模版文件进行详细说明:该文件有三个sheet页,分别为:用户、组、角色,以下分别从用户、组、角色三方面介绍导入信息该如何填写。

1) 用户,格式如下:

  • 用户ID:必填项,内容可随意定义,但必须保证其唯一性。对应t_user表中的c_userid。
  • 用户名称:必填项,登录名称,必须保证其唯一性。对应t_user表中的c_username。
  • 用户别名:别名,对应t_user表中的c_useralias。
  • 用户密码:密码,对应t_user表中的c_userpwd。
  • 用户描述:描述。对应t_user表中的c_userdesc。
  • 是否启用:该用户是否可以正常使用系统。1为启用、0为禁用,若不填写,则默认为禁用。对应t_user表中的c_isenabled。
  • 用户所属组ID:用户所在组的组ID,此ID需要与“组”sheet页中的组ID对应,多个组用半角符号;分隔。若不填写,则默认为根组。对应在t_group_user表中的增加相关记录。
  • 用户角色:用户所拥有的角色ID,此ID需要与“角色”sheet页中的角色ID对应,多个角色用半角符号;分隔。对应在t_user_role表中增加相关记录。

2) 用户组,格式如下:

  • 组ID:必填项,内容可随意定义,但必须保证其唯一性。对应t_group表中的c_groupid。
  • 组名称:必填项,名称,必须保证其唯一性。对应t_group表中的c_groupname。
  • 组别名:别名,对应t_group表中的c_groupalias。
  • 组描述:描述。对应t_group表中的c_groupdesc。
  • 机构编号:对应t_group表中的c_orgid。
  • 父组ID:对应t_group表中的c_pgrounpid。

3) 角色,格式如下:

  • 角色ID:必填项,内容可随意定义,但必须保证其唯一性。对应t_role表中的c_roleid。
  • 角色名称:必填项,名称,必须保证其唯一性。对应t_role表中的c_rolename。
  • 角色别名:别名,对应t_role表中的c_rolealias。
  • 角色描述:描述。对应t_role表中的c_roledesc。
  • 角色所属组ID:对应t_role表中的c_groupid。若此项不填写,系统自动把角色创建在根组下。

4、使用第三方系统的用户验证

说明:

实际项目中往往存在多个系统需要统一登录认证,客户要求将某个系统作为统一登录认证平台,其余系统访问此系统来进行登录认证。这种情况下,不需要再使用 Smartbi 产品的用户管理模块来管理组和用户,但还需要保留通过角色来设置操作权限。Smartbi 用户管理模块为了应对这种需求,提供了一个可以根据需要扩充的用户验证方式,让项目能根据实际情况开发不同的需求。如下图所示,根据实际情况扩展开发实现接口类,即可使用其他系统用户验证平台。在 Smartbi 用户管理模块中添加自定义的身份验证类,并将第三方系统用户验证平台上的用户、组、角色等信息同步到 Smartbi 用户管理模块中,并实现登录。

 

实现步骤:

  1. 参考“插件开发框架”,开发一个项目扩展包;(也可以直接创建一个java项目)
  2. 在扩展包项目中新建一个Java类 com.mycomp.mypackage.MyAuth,并且实现接口 IAuthentication;可参考AD域登录示例:ADAuth


  3. 参考“扩展包部署”文档,部署该项目扩展包;(如果步骤1中未使用扩展包方式,此时需要把实现的java类打成jar包,放在smartbi的war包lib目录下)
  4. 打开smartbi的配置界面(http://localhost:38080/smartbi/vision/config),如下图红色框所示。修改加密类型为"CLASS";修改登录验证类为MyAuth类的全名com.mycomp.mypackage.MyAuth;

     
  5. 此后 Smartbi 系统中需要进行用户登录验证的时候,皆会跳转到 MyAuth 类中由其完成用户的登录验证。

 

注意事项:

具体接口方法和示例类请参考 第三方用户验证API文档

 

5、使用第三方系统的权限验证

说明:
实际项目中往往存在多个系统需要统一权限认证,客户要求将某个系统作为统一认证平台, Smartbi 为了应对这种需求,提供了一个可以根据需要扩充的权限验证方式,让项目能根据实际情况开发不同的需求。


实现步骤:

  1. 参考“插件开发框架”,开发一个项目扩展包;
  2. 在扩展包项目中新建一个Java类 com.mycomp.mypackage.MyResourcePermissionAuth,并且实现接口 IResourcePermissionAuthorization
  3. 编辑 Smartbi 服务器配置文件smartbi-config.xml,如下图红色框所示。增加节点resource-permission-authorization,其属性为 MyResourcePermissionAuth 类的全名 com.mycomp.mypackage.MyResourcePermissionAuth;
  4. 参考“扩展包部署”文档,部署该项目扩展包;
  5. 此后 Smartbi 系统中需要进行资源权限验证的时候,皆会跳转到 MyResourcePermissionAuth 类中由其完成资源权限验证。

 

注意事项:

具体接口方法和示例类请参考 第三方权限验证API文档

 

1 Comment

  1. 5、使用第三方系统的权限验证,中可以不配置在xml,在扩展包用代码配置,如:在Module的active方法中catalogTreeModule.getConfig().setResourcePermissionAuthorization("com.mycomp.mypackage.MyResourcePermissionAuth");