2、在扩展包项目中新建一个Java类com.mycomp.MyXxxClass,并且实现接口smartbi.xxx.IXxxInterface。
3、在Smartbi中进行配置,使用前一步开发的类com.mycomp.MyXxxClass。
说明
如果在项目中使用第三方系统的权限验证,很可能也需要同步Smartbi资源树信息到第三方系统中以配合权限验证,即每当Smartbi中的资源树发生变化就通知第三方系统及时更新,效果如下。
实现步骤
1、在扩展包中新建一个Java类com.func.takeover.catalogtree.TreeSyncDemo,并且实现接口smartbi.catalogtree.ICatalogTreeListener。
2、配置新建的Java类,方式有如下两种:
(2)编辑Smartbi服务器配置文件smartbi-config.xml,如下图红色框所示。在已有节点catalogtree下面新增子节点catalog-tree-listener,其属性为TreeSyncDemo类的全名com.func.takeover.catalogtree.TreeSyncDemo。
如果在项目中要统一管理操作日志,有可能需要将Smartbi的操作日志按指定的形式输出到指定的地方,效果如下。
1、在扩展包中新建一个Java类com.log.takeover.log.LogSyncDemo,并且实现接口smartbi.repository.IOperationLogReceiver。
2、编辑Smartbi服务器配置文件smartbi-config.xml,如下图红色框所示。在已有节点smartbi下面新增子节点operationlog,接着在节点operationlog下新增子节点preserver-class,其属性值为LogSyncDemo类的全名com.log.takeover.log.LogSyncDemo。
第三方系统的用户管理能够包含Smartbi用户管理中的所有语义(用户组、角色、用户及其相应关系等),并且资源权限也希望由第三方系统统一管理,则可以屏蔽Smartbi的用户管理模块而使用第三方系统的用户管理作为统一用户管理平台。以下将介绍如何在外部系统中调用Smartbi用户管理模块。
集成用户属性
用户属性集成有三种方式,第一种是在使用iframe集成Smartbi的用户管理模块,直接在iframe中管理用户属性,第二种是直接操作用户属性对应的数据库表,第三种是通过服务器端SDKAPI管理用户属性。
方式一:在集成的用户管理模块中增加用户扩展属性
根据以上步骤使用iframe在第三方系统中集成了用户管理模块后,可以在第三方系统中增加用户扩展属性,具体步骤如下:
(1)在系统运维>系统选项>用户管理设置>用户扩展属性>设置中
(2)添加用户扩展属性
(3)清空缓存,重新进入用户管理,对任意一个用户进行设置,就可以看到刚刚添加的用户扩展属性
方式二:直接通过知识库以对用户扩展属性进行修改
用户扩展属性,定义在知识库的t_systemconfig表中,在其中c_key为USER_EXTEND_SETTING的行中,通过c_long列,以JSON形式定义。可通过下面的语句查询到该行数据:
SELECT*FROMt_systemconfigwherec_key="USER_EXTEND_SETTING";如配置了前面的用户扩展属性后,查询结果可能为:
修改c_long下的JSON即可对用户扩展属性进行修改。
方式三:通过服务器端SDKAPI对用户扩展属性进行读取
(1)读取用户扩展属性结构
通过smartbi.sdk.service.systemconfig.SystemConfigService可以对用户扩展属性的结构进行读取:
key=USER_EXTEND_SETTING;value=;longValue=[{"name":"用户扩展属性1","alias":"","typeS":"文本框","valueLength":"100"}](2)修改、读取用户属性值
通过smartbi.sdk.service.user.UserManagerService可以对用户属性值进行读取、修改:
说明:
实现步骤:
说明:实际项目中往往存在多个系统需要统一权限认证,客户要求将某个系统作为统一认证平台,Smartbi为了应对这种需求,提供了一个可以根据需要扩充的权限验证方式,让项目能根据实际情况开发不同的需求。
注意事项:
不使用Smartbi系统自身的操作权限验证逻辑,而是由第三方系统进行操作权限验证,给Smartbi返回一个用户能否访问指定操作的状态指示。
1.在扩展包中新建一个Java类com.opauth.takeover.usermanager.FunctionAuthDemo,并且实现接口smartbi.usermanager.IFunctionAuth。接口定义如下。
packagecom.mycomp.usermanager;publicclassTestFunctionAuthimplementsIFunctionAuth{privatestaticTestFunctionAuthauth=newTestFunctionAuth();publicstaticTestFunctionAuthgetInstance(){returnauth;}privateTestFunctionAuth(){//TestFunctionAuth}publicbooleanisFuncTypeAccessible(StringuserId,StringfunctionCode){//在这里实现用户操作权限判断的逻辑,返回状态true|false指明用户能否访问指定操作returntrue;}}
2.修改扩展包文件applicationContext.xml增加如下内容。