saiku权限配置是通过mondrian的权限配置实现的,也就是在schema文件简单的配置就能实现,由于对mondrian的权限并没有深入研究,笔者就描述下用到的权限配置;
笔者公司的saiku主要用于支持各个业务线的BI、日志等数据的分析,因此按业务线分配多个角色与模块:ROLE_PRODUCT、ROLE_TALK等,这时要求每个角色只能访问器对应业务模块的主题,管理员自然可以访问所有的模块主题,若一个用户需要访问多个模块则给该用户多个角色;
mondrian中权限配置最关注的是SchemaGrant和CubeGrant:
<Role name="ROLE_*">
<SchemaGrant access='none'><!-- "all" 、 "none" -->
<CubeGrant cube='' access='all' /><!-- "all", "custom" , "none" -->
</SchemaGrant>
</Role>
Schema1:
<Role name="ROLE_PRODUCT"><!-- 只能ROLE_PRODUCT访问 -->
<SchemaGrant access='none'>
<CubeGrant cube='CUBE1' access='all' />
</SchemaGrant>
</Role>
<Role name="ROLE_USER"><!--ROLE_USER不能访问 -->
<SchemaGrant access='none' />
</Role>
<Role name="ROLE_ADMIN"><!--ROLE_ADMIN访问所有 -->
<SchemaGrant access='all' />
</Role>
Schema2:
<Role name="ROLE_PRODUCT"><!-- 只能ROLE_PRODUCT访问 -->
<SchemaGrant access='none'>
<CubeGrant cube='CUBE2' access='all' />
</SchemaGrant>
</Role>
<Role name="ROLE_USER"><!--ROLE_USER不能访问 -->
<SchemaGrant access='none' />
</Role>
<Role name="ROLE_ADMIN"><!--ROLE_ADMIN访问所有 -->
<SchemaGrant access='all' />
</Role>
Schema3:
<Role name="ROLE_TALK">
<SchemaGrant access='none'>
<CubeGrant cube='CUBE3' access='all' />
<CubeGrant cube='CUBE4' access='all' />
</SchemaGrant>
</Role>
<Role name="ROLE_USER">
<SchemaGrant access='none' />
</Role>
<Role name="ROLE_ADMIN">
<SchemaGrant access='all' />
</Role>
如上配置就实现了:
1.ROLE_USER不能访问所有cube;
2.ROLE_ADMIN可以访问所有cube;
3.ROLE_PRODUCT可以访问CUBE1、CUBE2,ROLE_TALK可以访问CUBE3、CUBE4;
4.用户要访问所有cube,则需要给ROLE_PRODUCT和ROLE_TALK;
以上配置实现之前需要在数据源连接的配置中加入如下两个参数:
security.enabled=true
security.type=one2one