用户集成是系统集成中最常见的要求之一。当有多套系统同时使用时,客户往往希望统一进行用户管理、统一登录认证,也就是说只在一个系统中维护基础用户信息、只登录一次(单点登录)就可以访问不同系统的内容。用户集成包含两个方面内容:
- 用户同步:指多套系统拥有相同的用户信息,当以外部系统作为统一用户管理平台时,常采用如下两种方式实现 Smartbi 用户同步:
- 方式一:使用存储过程或 ETL 定时将第三方系统中的用户等信息同步到 Smartbi 用户表中。
- 方式二:在第三方系统中使用 Smartbi 用户管理的远程调用接口实现用户等信息的同步。
- 方式三:通过EXCEL导入方式实现用户信息同步。
- 方式四:通过计划任务同步用户信息,建议使用该方案(请参考 计划任务同步用户示例)。
- 用户验证:验证用户是否是合法的系统用户,Smartbi 即可以使用自己的验证体系,也支持使用第三方系统的用户验证体系。
注意事项:Smartbi 还有角色概念,无论哪种集成方式,都要求在 Smartbi “管理 -> 用户管理”模块中创建角色,并设置角色的操作权限和数据权限;用户必须被赋予角色,才能登录 Smartbi 并使用相应的功能。
1、同步数据库相关用户表
说明:
可以通过存储过程或 ETL 定时将第三方系统的用户信息同步到 Smartbi 知识库相关的用户表中。同步数据库时涉及到的表如下:
数据表 | 含义说明 |
---|---|
用户组表,记录用户组(机构)的信息。 | |
用户表,记录所有用户信息。 | |
用户组与用户对应表。相关字段:t_user.c_userid、t_group. c_groupid | |
角色表,记录系统所有角色的信息。相关字段:t_group. c_groupid | |
用户组与角色对应关系表。相关字段:t_role.c_roleid、t_group. c_groupid | |
用户与角色对应关系表。相关字段:t_role.c_roleid、t_user. c_userid | |
操作权限表。 | |
角色与操作权限关系表。相关字段: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 用户管理模块中,并实现登录。
实现步骤:
- 参考“插件开发框架”,开发一个项目扩展包;(也可以直接创建一个java项目)
- 在扩展包项目中新建一个Java类 com.mycomp.mypackage.MyAuth,并且实现接口 IAuthentication;可参考AD域登录示例:ADAuth
- 参考“扩展包部署”文档,部署该项目扩展包;(如果步骤1中未使用扩展包方式,此时需要把实现的java类打成jar包,放在smartbi的war包lib目录下)
- 打开smartbi的配置界面(http://localhost:38080/smartbi/vision/config),如下图红色框所示。修改加密类型为"CLASS";修改登录验证类为MyAuth类的全名com.mycomp.mypackage.MyAuth;
- 此后 Smartbi 系统中需要进行用户登录验证的时候,皆会跳转到 MyAuth 类中由其完成用户的登录验证。
注意事项:
具体接口方法和示例类请参考 第三方用户验证API文档。
5、使用第三方系统的权限验证
说明:
实际项目中往往存在多个系统需要统一权限认证,客户要求将某个系统作为统一认证平台, Smartbi 为了应对这种需求,提供了一个可以根据需要扩充的权限验证方式,让项目能根据实际情况开发不同的需求。
实现步骤:
- 参考“插件开发框架”,开发一个项目扩展包;
- 在扩展包项目中新建一个Java类 com.mycomp.mypackage.MyResourcePermissionAuth,并且实现接口 IResourcePermissionAuthorization;
- 编辑 Smartbi 服务器配置文件smartbi-config.xml,如下图红色框所示。增加节点resource-permission-authorization,其属性为 MyResourcePermissionAuth 类的全名 com.mycomp.mypackage.MyResourcePermissionAuth;
- 参考“扩展包部署”文档,部署该项目扩展包;
- 此后 Smartbi 系统中需要进行资源权限验证的时候,皆会跳转到 MyResourcePermissionAuth 类中由其完成资源权限验证。
注意事项:
具体接口方法和示例类请参考 第三方权限验证API文档。